Heim  >  Artikel  >  Backend-Entwicklung  >  So verwenden Sie WebSocket für die plattformübergreifende Kommunikation in Golang

So verwenden Sie WebSocket für die plattformübergreifende Kommunikation in Golang

WBOY
WBOYOriginal
2023-12-18 12:09:19641Durchsuche

So verwenden Sie WebSocket für die plattformübergreifende Kommunikation in Golang

WebSocket ist eine Technologie, die für die bidirektionale Echtzeitkommunikation zwischen einem Webbrowser und einem Server verwendet wird. Es bietet eine zuverlässige Möglichkeit zum Senden und Empfangen von Daten und ist effizienter und schneller als der herkömmliche HTTP-Anfrage-Antwort-Mechanismus. In Golang können wir Bibliotheken von Drittanbietern verwenden, um die WebSocket-Kommunikation zu unterstützen. In diesem Artikel wird die Verwendung der Gorilla/Websocket-Bibliothek zur Implementierung der WebSocket-Kommunikation vorgestellt und spezifische Codebeispiele bereitgestellt.

  1. Gorilla/Websocket-Bibliothek installieren

Verwenden Sie den Befehl go get, um die Gorilla/Websocket-Bibliothek einfach zu installieren:

go get github.com/gorilla/websocket
  1. WebSocket-Verbindung erstellen

Verwenden Sie auf der Serverseite die Upgrader-Funktion der Gorilla/Websocket-Bibliothek, um eine HTTP-Verbindung herzustellen Upgrade auf WebSocket-Verbindung. Der Code lautet wie folgt:

import (
    "net/http"

    "github.com/gorilla/websocket"
)

var upgrader = websocket.Upgrader{
    ReadBufferSize:  1024,
    WriteBufferSize: 1024,
}

func myHandler(w http.ResponseWriter, r *http.Request) {
    // 将HTTP连接升级为WebSocket连接
    conn, err := upgrader.Upgrade(w, r, nil)
    if err != nil {
        // 处理错误
        return
    }

    // 处理WebSocket连接
    for {
        // 读取消息
        messageType, p, err := conn.ReadMessage()
        if err != nil {
            // 处理错误
            return
        }

        // 处理消息
        err = conn.WriteMessage(messageType, p)
        if err != nil {
            // 处理错误
            return
        }
    }
}

func main() {
    http.HandleFunc("/", myHandler)
    http.ListenAndServe(":8080", nil)
}

Auf der Clientseite können wir JavaScript-Code verwenden, um eine WebSocket-Verbindung zu erstellen. Der Code lautet wie folgt:

var ws = new WebSocket("ws://localhost:8080/");

ws.onopen = function() {
    console.log("WebSocket连接已打开");
};

ws.onmessage = function(evt) {
    console.log("接收到消息: " + evt.data);
};

ws.onclose = function() {
    console.log("WebSocket连接已关闭");
};
  1. Nachrichten senden und empfangen

Auf der Serverseite können wir die WriteMessage-Funktion verwenden, um Nachrichten an den Client zu senden. Der Code lautet wie folgt:

err := conn.WriteMessage(websocket.TextMessage, []byte("Hello, client!"))
if err != nil {
    // 处理错误
    return
}

Auf der Clientseite können wir die Sendefunktion zum Senden von Nachrichten und die Onmessage-Funktion zum Empfangen von Nachrichten verwenden. Der Code lautet wie folgt:

ws.send("Hello, server!");

ws.onmessage = function(evt) {
    console.log("接收到消息: " + evt.data);
};
  1. Umgang mit WebSocket-Anfragen

In tatsächlichen Anwendungen müssen wir möglicherweise eine Authentifizierung und Autorisierung durchführen, wenn wir WebSocket-Anfragen verarbeiten. In diesem Fall können wir HTTP-Header verwenden, um Authentifizierungsinformationen zu übergeben. Sie können beispielsweise Informationen wie die folgenden im HTTP-Header hinzufügen:

Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

Dann können wir auf der Serverseite die CheckOrigin-Option der Upgrader-Funktion verwenden, um den Ursprung der WebSocket-Anfrage zu überprüfen und die Authentifizierungsinformationen zu verwenden im HTTP-Header, um die Anfrage zu verarbeiten. Der spezifische Code lautet wie folgt:

var upgrader = websocket.Upgrader{
    ReadBufferSize:  1024,
    WriteBufferSize: 1024,
    CheckOrigin: func(r *http.Request) bool {
        // 检查请求的来源
        if r.Header.Get("Origin") != "http://localhost:8080" {
            return false
        }

        // 检查认证信息
        if r.Header.Get("Authorization") != "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" {
            return false
        }

        return true
    },
}

func myHandler(w http.ResponseWriter, r *http.Request) {
    // 将HTTP连接升级为WebSocket连接
    conn, err := upgrader.Upgrade(w, r, nil)
    if err != nil {
        // 处理错误
        return
    }

    // 处理WebSocket连接
    for {
        // 读取消息
        messageType, p, err := conn.ReadMessage()
        if err != nil {
            // 处理错误
            return
        }

        // 处理消息
        err = conn.WriteMessage(messageType, p)
        if err != nil {
            // 处理错误
            return
        }
    }
}
  1. Zusammenfassung

Dieser Artikel stellt die Verwendung der Gorilla/Websocket-Bibliothek in Golang zur Implementierung der WebSocket-Kommunikation vor und bietet spezifische Codebeispiele. Mit der WebSocket-Technologie können wir effiziente Zwei-Wege-Kommunikationsanwendungen in Echtzeit erstellen, beispielsweise Online-Chatrooms und Multiplayer-Spiele. In praktischen Anwendungen müssen wir auch Aspekte wie Sicherheit und Zuverlässigkeit berücksichtigen, z. B. Authentifizierung und Autorisierung, Ausnahmebehandlung usw.

Das obige ist der detaillierte Inhalt vonSo verwenden Sie WebSocket für die plattformübergreifende Kommunikation in Golang. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn