本文目錄一覽:
golang 能鏈接多少個 websocket
用一個服務器是可以的,但是websocket必須是同一個對象連接服務,否則會報錯。 websocket.onmessage = function (evt) { //收到服務器消息,使用evt.data提取 //自己根據返回的內容分發給不同聊天室};有啥問題可以留言給我
go語言聊天室實現(七)websocket收消息設置
上一節中,我們為每個連接都創建了一個goroutine來讀取其中的消息,現在我們將這個讀取消息的方法實現一下。
我們在application目錄下新建controllers目錄,並在其中創建一個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方法來進行註冊。
下一節中我們再介紹具體的註冊邏輯。
go語言聊天室實現(六)創建HTTP連接,並升級為長連接
我們在mian函數中,首先初始化配置文件,然後新建http連接。
這個連接創建之後,監聽服務器的9999端口。如果url的路徑後綴為 “/ws”,就轉發到ws/ws.go中的IndexHandler方法中。
這個方法中首先我們創建一個websocket的Upgrader實例,然後我們使用Upgrader的upgrade方法來升級一下我們的連接為長連接。
升級完成之後會返回一個*websocket.Conn的連接,我們之後所有的關於連接的操作,都是基於該conn的。
在該連接完成之後,我們將連接存放到一個名為Client的map中,以便之後管理更為方便。
之後,我們啟動一個goroutine來讀取連接中發送的信息內容,再根據內容進行相應的操作。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/243288.html