掃二維碼與項目經理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術咨詢/運營咨詢/技術建議/互聯(lián)網交流
go get golang.org/x/net/websocket。 WebSocket在Golang中的應用實踐

WebSocket是一種在單個TCP連接上進行全雙工通信的協(xié)議,它使得瀏覽器和服務器之間可以實現(xiàn)實時雙向通信,從而提高了用戶體驗,在Golang中,我們可以使用gorilla/websocket庫來實現(xiàn)WebSocket服務器和客戶端的功能,本文將介紹如何在Golang中使用WebSocket進行實時通信,并提供一些實踐案例。
gorilla/websocket庫我們需要安裝gorilla/websocket庫,在終端中輸入以下命令:
go get github.com/gorilla/websocket
1、導入相關包:
import ( "fmt" "net/http" "github.com/gorilla/websocket" )
2、定義處理WebSocket連接的函數:
func handleConnections(w http.ResponseWriter, r *http.Request) {
// 將HTTP連接升級為WebSocket連接
ws, err := upgrader.Upgrade(w, r, nil)
if err != nil {
fmt.Println("Error upgrading connection:", err)
return
}
defer ws.Close()
for {
// 讀取客戶端發(fā)送的消息
_, message, err := ws.ReadMessage()
if err != nil {
fmt.Println("Error reading message:", err)
break
}
fmt.Printf("Received message: %s
", message)
// 將收到的消息原樣返回給客戶端
err = ws.WriteMessage(websocket.TextMessage, message)
if err != nil {
fmt.Println("Error writing message:", err)
break
}
}
}
3、在主函數中啟動HTTP服務器并監(jiān)聽WebSocket連接:
func main() {
http.HandleFunc("/ws", handleConnections)
http.ListenAndServe(":8080", nil)
}
至此,我們已經創(chuàng)建了一個簡單的WebSocket服務器,客戶端可以通過訪問ws://localhost:8080/ws與服務器建立連接并進行實時通信。
1、我們需要導入相關包:
import ( "fmt" "log" "os" "time" "github.com/gorilla/websocket" )
2、我們可以編寫一個簡單的WebSocket客戶端,用于與服務器進行通信:
func main() {
// 建立WebSocket連接到服務器
conn, _, err := websocket.DefaultDialer.Dial("ws://localhost:8080/ws", nil)
if err != nil {
log.Fatal("Error connecting to server:", err)
}
defer conn.Close()
defer os.Exit(0)
// 每隔5秒向服務器發(fā)送一條消息,并接收一條回復消息打印出來
for i := 0; i < 5; i++ {
go func() { time.Sleep(5 * time.Second); conn.WriteMessage(websocket.TextMessage, []byte("Hello from client")) }()
msgType, msg, err := conn.ReadMessage() // 這里會阻塞等待服務器的回復消息,所以需要放在goroutine中執(zhí)行以避免阻塞主線程,如果不需要阻塞等待,可以直接調用conn.ReadMessage(),err為nil表示收到了回復消息,如果err非nil,表示連接已關閉或發(fā)生錯誤,msg即為收到的回復消息。 fmt.Printf("Received message: %s
", msg) }()

我們在微信上24小時期待你的聲音
解答本文疑問/技術咨詢/運營咨詢/技術建議/互聯(lián)網交流