真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

go語言中端口使用 go 端口轉(zhuǎn)發(fā)

Golang 端口轉(zhuǎn)發(fā)工具

初學(xué)go,寫一個(gè)端口轉(zhuǎn)發(fā)工具。很方便的小工具,希望能對(duì)大家學(xué)習(xí)go語言有所幫助。

公司主營業(yè)務(wù):成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)公司是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)公司推出沙坡頭免費(fèi)做網(wǎng)站回饋大家。

```Golang

package main

import(

"fmt"

"io"

"net"

"sync"

)

varlocksync.Mutex

vartrueList[]string

varipstring

varliststring

funcmain(){

ip="0.0.0.0:888"

server()

}

funcserver(){

fmt.Printf("Listening%s",ip)

lis,err:=net.Listen("tcp",ip)

iferr!=nil{

fmt.Println(err)

return

}

deferlis.Close()

for{

conn,err:=lis.Accept()

iferr!=nil{

fmt.Println("建立連接錯(cuò)誤:%v\n",err)

continue

}

fmt.Println(conn.RemoteAddr(),conn.LocalAddr())

gohandle(conn)

}

}

funchandle(sconnnet.Conn){

defersconn.Close()

ip:="127.0.0.1:8888"

dconn,err:=net.Dial("tcp",ip)

iferr!=nil{

fmt.Printf("連接%v失敗:%v\n",ip,err)

return

}

ExitChan:=make(chanbool,1)

gofunc(sconnnet.Conn,dconnnet.Conn,Exitchanbool){

io.Copy(dconn,sconn)

ExitChan-true

}(sconn,dconn,ExitChan)

gofunc(sconnnet.Conn,dconnnet.Conn,Exitchanbool){

io.Copy(sconn,dconn)

ExitChan-true

}(sconn,dconn,ExitChan)

-ExitChan

dconn.Close()

}

一學(xué)就會(huì),手把手教你用Go語言調(diào)用智能合約

智能合約調(diào)用是實(shí)現(xiàn)一個(gè) DApp 的關(guān)鍵,一個(gè)完整的 DApp 包括前端、后端、智能合約及區(qū)塊 鏈系統(tǒng),智能合約的調(diào)用是連接區(qū)塊鏈與前后端的關(guān)鍵。

我們先來了解一下智能合約調(diào)用的基礎(chǔ)原理。智能合約運(yùn)行在以太坊節(jié)點(diǎn)的 EVM 中。因此要 想調(diào)用合約必須要訪問某個(gè)節(jié)點(diǎn)。

以后端程序?yàn)槔?,后端服?wù)若想連接節(jié)點(diǎn)有兩種可能,一種是雙 方在同一主機(jī),此時(shí)后端連接節(jié)點(diǎn)可以采用 本地 IPC(Inter-Process Communication,進(jìn) 程間通信)機(jī)制,也可以采用 RPC(Remote Procedure Call,遠(yuǎn)程過程調(diào)用)機(jī)制;另 一種情況是雙方不在同一臺(tái)主機(jī),此時(shí)只能采用 RPC 機(jī)制進(jìn)行通信。

提到 RPC, 讀者應(yīng)該對(duì) Geth 啟動(dòng)參數(shù)有點(diǎn)印象,Geth 啟動(dòng)時(shí)可以選擇開啟 RPC 服務(wù),對(duì)應(yīng)的 默認(rèn)服務(wù)端口是 8545。。

接著,我們來了解一下智能合約運(yùn)行的過程。

智能合約的運(yùn)行過程是后端服務(wù)連接某節(jié)點(diǎn),將 智能合約的調(diào)用(交易)發(fā)送給節(jié)點(diǎn),節(jié)點(diǎn)在驗(yàn)證了交易的合法性后進(jìn)行全網(wǎng)廣播,被礦工打包到 區(qū)塊中代表此交易得到確認(rèn),至此交易才算完成。

就像數(shù)據(jù)庫一樣,每個(gè)區(qū)塊鏈平臺(tái)都會(huì)提供主流 開發(fā)語言的 SDK(Software Development Kit,軟件開發(fā)工具包),由于 Geth 本身就是用 Go 語言 編寫的,因此若想使用 Go 語言連接節(jié)點(diǎn)、發(fā)交易,直接在工程內(nèi)導(dǎo)入 go-ethereum(Geth 源碼) 包就可以了,剩下的問題就是流程和 API 的事情了。

總結(jié)一下,智能合約被調(diào)用的兩個(gè)關(guān)鍵點(diǎn)是節(jié)點(diǎn)和 SDK。

由于 IPC 要求后端與節(jié)點(diǎn)必須在同一主機(jī),所以很多時(shí)候開發(fā)者都會(huì)采用 RPC 模式。除了 RPC,以太坊也為開發(fā)者提供了 json- rpc 接口,本文就不展開討論了。

接下來介紹如何使用 Go 語言,借助 go-ethereum 源碼庫來實(shí)現(xiàn)智能合約的調(diào)用。這是有固定 步驟的,我們先來說一下總體步驟,以下面的合約為例。

步驟 01:編譯合約,獲取合約 ABI(Application Binary Interface,應(yīng)用二進(jìn)制接口)。 單擊【ABI】按鈕拷貝合約 ABI 信息,將其粘貼到文件 calldemo.abi 中(可使用 Go 語言IDE 創(chuàng)建該文件,文件名可自定義,后綴最好使用 abi)。

最好能將 calldemo.abi 單獨(dú)保存在一個(gè)目錄下,輸入“l(fā)s”命令只能看到 calldemo.abi 文件,參 考效果如下:

步驟 02:獲得合約地址。注意要將合約部署到 Geth 節(jié)點(diǎn)。因此 Environment 選擇為 Web3 Provider。

在【Environment】選項(xiàng)框中選擇“Web3 Provider”,然后單擊【Deploy】按鈕。

部署后,獲得合約地址為:0xa09209c28AEf59a4653b905792a9a910E78E7407。

步驟 03:利用 abigen 工具(Geth 工具包內(nèi)的可執(zhí)行程序)編譯智能合約為 Go 代碼。abigen 工具的作用是將 abi 文件轉(zhuǎn)換為 Go 代碼,命令如下:

其中各參數(shù)的含義如下。 (1)abi:是指定傳入的 abi 文件。 (2)type:是指定輸出文件中的基本結(jié)構(gòu)類型。 (3)pkg:指定輸出文件 package 名稱。 (4)out:指定輸出文件名。 執(zhí)行后,將在代碼目錄下看到 funcdemo.go 文件,讀者可以打開該文件欣賞一下,注意不要修改它。

步驟 04:創(chuàng)建 main.go,填入如下代碼。 注意代碼中 HexToAddress 函數(shù)內(nèi)要傳入該合約部署后的地址,此地址在步驟 01 中獲得。

步驟 04:設(shè)置 go mod,以便工程自動(dòng)識(shí)別。

前面有所提及,若要使用 Go 語言調(diào)用智能合約,需要下載 go-ethereum 工程,可以使用下面 的指令:

該指令會(huì)自動(dòng)將 go-ethereum 下載到“$GOPATH/src/github.com/ethereum/go-ethereum”,這樣還算 不錯(cuò)。不過,Go 語言自 1.11 版本后,增加了 module 管理工程的模式。只要設(shè)置好了 go mod,下載 依賴工程的事情就不必關(guān)心了。

接下來設(shè)置 module 生效和 GOPROXY,命令如下:

在項(xiàng)目工程內(nèi),執(zhí)行初始化,calldemo 可以自定義名稱。

步驟 05:運(yùn)行代碼。執(zhí)行代碼,將看到下面的效果,以及最終輸出的 2020。

上述輸出信息中,可以看到 Go 語言會(huì)自動(dòng)下載依賴文件,這就是 go mod 的神奇之處??吹?2020,相信讀者也知道運(yùn)行結(jié)果是正確的了。

如何用Go語言打造一個(gè)高性能MySQL Proxy

1. 整體架構(gòu)

kingshard采用Go開發(fā),充分地利用了Go語言的并發(fā)特性。Go語言在并發(fā)方面,做了很好的封裝,這大大簡化了kingshard的開發(fā)工作。kingshard的整體工作流程入下所述:

讀取配置文件并啟動(dòng),在配置文件中設(shè)置的監(jiān)聽端口監(jiān)聽客戶端請(qǐng)求。

收到客戶端連接請(qǐng)求后,啟動(dòng)一個(gè)goroutine單獨(dú)處理該請(qǐng)求。

首選進(jìn)行登錄驗(yàn)證,驗(yàn)證過程完全兼容MySQL認(rèn)證協(xié)議,由于用戶名和密碼在配置文件中已經(jīng)設(shè)置好,所以可以利用該信息驗(yàn)證連接請(qǐng)求是否合法。

當(dāng)用戶名和密碼都正確時(shí),轉(zhuǎn)入下面的步驟,否則返回出錯(cuò)信息給客戶端。

認(rèn)證通過后,客戶端發(fā)送SQL語句。

go語言聊天室實(shí)現(xiàn)(六)創(chuàng)建HTTP連接,并升級(jí)為長連接

我們?cè)趍ian函數(shù)中,首先初始化配置文件,然后新建http連接。

這個(gè)連接創(chuàng)建之后,監(jiān)聽服務(wù)器的9999端口。如果url的路徑后綴為 "/ws",就轉(zhuǎn)發(fā)到ws/ws.go中的IndexHandler方法中。

這個(gè)方法中首先我們創(chuàng)建一個(gè)websocket的Upgrader實(shí)例,然后我們使用Upgrader的upgrade方法來升級(jí)一下我們的連接為長連接。

升級(jí)完成之后會(huì)返回一個(gè)*websocket.Conn的連接,我們之后所有的關(guān)于連接的操作,都是基于該conn的。

在該連接完成之后,我們將連接存放到一個(gè)名為Client的map中,以便之后管理更為方便。

之后,我們啟動(dòng)一個(gè)goroutine來讀取連接中發(fā)送的信息內(nèi)容,再根據(jù)內(nèi)容進(jìn)行相應(yīng)的操作。

golang 可以監(jiān)聽多個(gè)端口嗎

由于linux的socket監(jiān)聽機(jī)制和TCP協(xié)議,多個(gè)進(jìn)程無法監(jiān)聽同一個(gè)端口,但是具體到nginx,可以多個(gè)nginx進(jìn)程監(jiān)聽到不同端口,通過一個(gè)主進(jìn)程端口做upstream來實(shí)現(xiàn)負(fù)載均衡,這個(gè)有點(diǎn)類似于網(wǎng)絡(luò)的匯聚,可以設(shè)置不同的策略,比如iphash,urlhash或者RR。

golang一個(gè)端口怎么同時(shí)提供http和https

1、首先使用一個(gè)公共的端口作為監(jiān)聽,讓HTTP和HTTPS服務(wù)分別監(jiān)聽在各自的端口上。

2、其次在公共端口服務(wù)區(qū)分這是HTTP請(qǐng)求還是HTTPS請(qǐng)求。

3、最后各自轉(zhuǎn)發(fā)到所服務(wù)的監(jiān)聽即可。


網(wǎng)頁標(biāo)題:go語言中端口使用 go 端口轉(zhuǎn)發(fā)
URL鏈接:http://weahome.cn/article/hicici.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部