在 go 中實現 websocket 服務
目標:瞭解 websocket ,能夠使用 golang 來實現 websocket 服務
要求:瞭解 go 基本語法
webSocket 的定義
WebSocket 是基於 TCP 的一個雙向傳輸資料的協議,和HTTP協議一樣,是在應用層的.他的出現,是為了解決網頁進行 持久雙向傳輸資料 的問題。
WebSocket 與 HTTP的關係 與 TCP連結的關係
其實WebSocket 和 HTTP 實際上都是一個TCP連結, WebSocket協議和HTTP協議的作用就是 規定他們用 TCP 對話的規矩可以檢視 RFC6455 文件
我們來建立一個 go 專案,專案結構如下圖

在 main.go 檔案中引入所需的模組

* 其中 gorilla/websocket 需要從 github 上下載
建立服務,埠號為 3000,然後在終端導航到專案目錄下,執行 go build src/main.go && ./main 命令(來編譯 main.go 為 main.exe) 後執行 exe 檔案來啟動服務。如何建立 web 不是今天重點,如果想了解,可以查下有關資料或給我留言我會隨後分享如何使用 go 來建立web 。


下圖為 index.html 檔案

啟動後,在位址列輸入 localhost:300 可以看到 hehe(index.html),說明服務已經成功啟動。

我們開始建立 socketweb 服務
建立一個 upgrader 的例項, 提供 Upgrade 方法,可以將 http 升級為 websocket。** go 語言支援函式返回多個返回值。


大家可能已經注意到在 func 多了 go 關鍵字。
** go中沒有多程序多執行緒的概念,而是使用goroutine概念,我們可以把goroutine當作其他語言中的執行緒,當在一個函式前加入go關鍵字,就啟動了一個goroutine。
*是指標運算子 , 可以表示一個變數是指標型別 , 也可以表示一個指標變數所指向的儲存單元 , 也就是這個地址所儲存的值 .其零值是 nil
在 chrome 開發者工具的 console 標籤下,我們輸入以下code 來模擬客戶端,來連結 websocket 服務。看到已經連線成功

在服務端列印看客戶端傳送的訊息



實現伺服器定時推送訊息給客戶端
定義傳送訊息結構


** 在函式中, :=簡潔賦值語句在明確型別的地方,可以用於替代 var


