首頁  >  文章  >  後端開發  >  學習Go語言中的網路程式設計函數並實現WebSocket通信

學習Go語言中的網路程式設計函數並實現WebSocket通信

WBOY
WBOY原創
2023-07-29 17:37:221377瀏覽

學習Go語言中的網路程式設計函數並實作WebSocket通訊

#介紹
Go語言作為一種強大的程式語言,被廣泛應用於網路程式設計領域。它提供了豐富的網頁程式設計函數和函式庫,使得開發者可以輕鬆實現各種網路通訊的功能。本文將介紹Go語言中一些常用的網頁程式設計函數,並結合範例來實作WebSocket通訊。

一、網路程式設計函數

  1. 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()
  2. Accept
    函式簽章:func (l *TCPListener) Accept() (Conn, error)
    用途:接受連線請求,回傳一個Conn物件
    範例:

    conn, err := listener.Accept()
    if err != nil {
     log.Fatal(err)
    }
    defer conn.Close()
  3. WebSocket協定
    WebSocket是一種在單一TCP連線上進行全雙工通訊的協議,它允許客戶端和伺服器之間進行即時通訊。 Go語言提供了gorilla/websocket函式庫來方便地實作WebSocket通訊功能。

二、實作WebSocket通訊

  1. 安裝gorilla/websocket
    在命令列中執行以下指令:

    go get -u github.com/gorilla/websocket
  2. 伺服器端程式碼

    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))
    }
  3. 客戶端程式碼

    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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn