學習Go語言中的網路程式設計函數並實作WebSocket通訊
#介紹
Go語言作為一種強大的程式語言,被廣泛應用於網路程式設計領域。它提供了豐富的網頁程式設計函數和函式庫,使得開發者可以輕鬆實現各種網路通訊的功能。本文將介紹Go語言中一些常用的網頁程式設計函數,並結合範例來實作WebSocket通訊。
一、網路程式設計函數
net.Listen
函數簽章:func Listen(network, address string) (Listener, error)
用途:監聽指定的網路位址,回傳一個Listener物件
範例:
listener, err := net.Listen("tcp", "127.0.0.1:8080") if err != nil { log.Fatal(err) } defer listener.Close()
Accept
函式簽章:func (l *TCPListener) Accept() (Conn, error)
用途:接受連線請求,回傳一個Conn物件
範例:
conn, err := listener.Accept() if err != nil { log.Fatal(err) } defer conn.Close()
gorilla/websocket
函式庫來方便地實作WebSocket通訊功能。 二、實作WebSocket通訊
安裝gorilla/websocket
庫
在命令列中執行以下指令:
go get -u github.com/gorilla/websocket
伺服器端程式碼
package main import ( "log" "net/http" "github.com/gorilla/websocket" ) var upgrader = websocket.Upgrader{ ReadBufferSize: 1024, WriteBufferSize: 1024, } func websocketHandler(w http.ResponseWriter, r *http.Request) { conn, err := upgrader.Upgrade(w, r, nil) if err != nil { log.Fatal(err) } defer conn.Close() for { messageType, message, err := conn.ReadMessage() if err != nil { log.Println(err) break } log.Printf("Received message: %s ", message) if err := conn.WriteMessage(messageType, message); err != nil { log.Println(err) break } } } func main() { http.HandleFunc("/websocket", websocketHandler) log.Fatal(http.ListenAndServe(":8080", nil)) }
客戶端程式碼
package main import ( "log" "net/url" "github.com/gorilla/websocket" ) func main() { u := url.URL{Scheme: "ws", Host: "localhost:8080", Path: "/websocket"} conn, _, err := websocket.DefaultDialer.Dial(u.String(), nil) if err != nil { log.Fatal(err) } defer conn.Close() for i := 0; i < 5; i++ { message := []byte("Hello from client") if err := conn.WriteMessage(websocket.TextMessage, message); err != nil { log.Fatal(err) } _, receivedMessage, err := conn.ReadMessage() if err != nil { log.Fatal(err) } log.Printf("Received message from server: %s", receivedMessage) } }
運行以上兩個程式碼文件,即可實現客戶端與伺服器之間基於WebSocket協定的通訊。客戶端將會向伺服器發送一則訊息,並接收伺服器傳回的訊息,並重複5次。
總結
本文介紹了Go語言中的一些常用的網路程式設計函數,並結合範例實作了WebSocket通訊。透過學習這些知識,可以讓我們更能理解並應用於實際的網路程式設計。無論是開發網頁應用程式或其他網路通訊場景,掌握這些網路程式設計函數將會大大提升我們的開發效率。希望讀者能透過學習,進一步深入了解Go語言的網路程式設計特性,進而在實際專案中靈活應用。
以上是學習Go語言中的網路程式設計函數並實現WebSocket通信的詳細內容。更多資訊請關注PHP中文網其他相關文章!