go語言開發(fā)局域網聊天 go語言開發(fā)agent

Golang gRPC實現內網穿透

內網穿透即是使用公網服務器作為代理,轉發(fā)內網(如辦公室、家里)的網絡請求使其能夠在外網中被訪問到。

創(chuàng)新互聯建站是一家專業(yè)提供新密企業(yè)網站建設,專注與成都網站設計、網站建設、H5響應式網站、小程序制作等業(yè)務。10年已為新密眾多企業(yè)、政府機構等服務。創(chuàng)新互聯專業(yè)網站制作公司優(yōu)惠進行中。

server端監(jiān)聽兩個端口,一個用來和接收用戶的http請求,一個監(jiān)聽gRPC客戶端,和內網服務器進行通信;

client啟動時連接server端;

當User請求server http端口時,將http進行阻塞,并將User請求內容通過gRPC發(fā)給client;

client將從server收到的請求發(fā)往本地的http服務;

client將從本地程序收到的http response通過gRPC發(fā)送給server;

server結束http阻塞,將從client收到的http response發(fā)給User。

github地址:

go語言聊天室實現(七)websocket收消息設置

上一節(jié)中,我們?yōu)槊總€連接都創(chuàng)建了一個goroutine來讀取其中的消息,現在我們將這個讀取消息的方法實現一下。

我們在application目錄下新建controllers目錄,并在其中創(chuàng)建一個MessageController.go文件。

首先我們新建一個MessageController的結構體,內容如下

這個結構體包括兩個內容,一個是我們將連接放在數組之后,返回的索引,另一個是連接本身.

這個是具體的方法。

我們首先設置了一下讀消息的大小、超時時間以及超時后需要的操作。

超時時間如果設置為0,那么就是永不超時。之前在這里直接寫0,被告知需要傳一個time.Time類型的數據。最終谷歌后才得到了這個值time.Time{}為"0001-01-01 00:00:00 +0000 UTC"。

我們將用戶手法消息的內容定義為一個結構體,然后將用戶的訂閱信息的json通過json.unmarshal轉換成這個結構體。

之后的switch操作與我們在Swoole中的操作基本雷同,在查詢到login之后,調用service中 的login方法來進行注冊。

下一節(jié)中我們再介紹具體的注冊邏輯。

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

我們在mian函數中,首先初始化配置文件,然后新建http連接。

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

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

升級完成之后會返回一個*websocket.Conn的連接,我們之后所有的關于連接的操作,都是基于該conn的。

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

之后,我們啟動一個goroutine來讀取連接中發(fā)送的信息內容,再根據內容進行相應的操作。

go語言聊天室實現(二)gorilla/websocket中的聊天室示例

我們可以看到 gorilla/websocket中的examples中有一個聊天室的demo。

我們進入該項目可以看到里面有這樣的一些內容

按照官方的運行方式來運行這個項目

在瀏覽器中打開8080端口,可以看到該項目可以被成功運行了。

就是這樣一個簡單的demo。

然后我們去看一下它的具體實現。

在這個項目中首先定義了一個hub的結構體:

這個結構體中,clients代表所有已經注冊的用戶,broadcast管道會存儲客戶端發(fā)送來的信息。 register是一個*Client類型的管道,用于存儲新注冊的用戶,unregister管道反之。

我們打開main.go,main函數的源碼為:

在這里首先會新開一個goroutine,去跑hub的run方法,run方法中一個死循環(huán),不停地去輪詢hub中的內容

如果取到了新用戶,就加入到clients中,如果取到了信息,就循環(huán)所有的client,將信息寫到client.send中。

我們看到在請求路徑為根的時候,它會請求一個函數,而這個函數就是將home.html發(fā)送到客戶端。

而在請求路徑為“/ws”的時候,他會執(zhí)行一個serveWS的函數。

每當一個新的用戶進來之后,首先將連接升級為長連接,然后將當前的client寫到register中,由hub.run函數去做處理。然后開啟兩個goroutine,一個去讀client中發(fā)送來的數據,一個將數據寫入到所有的client中,去發(fā)送給用戶。

這就是整個聊天室的實現原理。

網站題目:go語言開發(fā)局域網聊天 go語言開發(fā)agent
文章源于:http://muchs.cn/article4/dohocoe.html

成都網站建設公司_創(chuàng)新互聯,為您提供品牌網站建設面包屑導航、關鍵詞優(yōu)化企業(yè)建站、網站排名、企業(yè)網站制作

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯

營銷型網站建設