Heim > Backend-Entwicklung > Golang > Websocket-Server-Implementierung mithilfe der X/Net-Bibliothek Trowing 403

Websocket-Server-Implementierung mithilfe der X/Net-Bibliothek Trowing 403

WBOY
Freigeben: 2024-02-13 17:03:08
nach vorne
947 Leute haben es durchsucht

使用 x/net 库 trowing 403 的 Websocket 服务器实现

Der PHP-Editor Banana stellt Ihnen eine Methode vor, die die x/net-Bibliothek verwendet, um einen Websocket-Server zu implementieren, der einen 403-Fehler auslöst. Websocket ist ein Kommunikationsprotokoll, das eine dauerhafte Verbindung zwischen einem Client und einem Server herstellt. Ein 403-Fehler bedeutet, dass der Server die Anfrage des Clients abgelehnt hat. Durch die Verwendung der x/net-Bibliothek können wir ganz einfach einen Websocket-Server erstellen und Anfragen ablehnen, indem wir bei Bedarf einen 403-Fehler auslösen. Diese Methode ist einfach und effektiv und eignet sich für Szenarien, in denen Anfragen autorisiert oder der Zugriff eingeschränkt werden müssen.

Frageninhalt

Ich versuche, einen Websocket-Server mithilfe der x/net/websocket Standardbibliothek zu implementieren.

Meine bisherigen Versuche sind wie folgt:

package main

import (
    "fmt"
    "net/http"

    "golang.org/x/net/websocket"
)

type Server struct {
    baseUri     string
    connections map[string][]*websocket.Conn
}

func initServer(baseUri string) *Server {
    return &Server{
        baseUri: baseUri,
    }
}

func (server *Server) handleConnections() {
    http.Handle("/ws", websocket.Handler(server.listenConnections))
    http.ListenAndServe(":3000", nil)
}

func (server *Server) listenConnections(ws *websocket.Conn) {
    fmt.Println("New connection established")
    for {
        fmt.Println("FOO")
    }
}

func main() {
    server := initServer("/ws")
    server.handleConnections()
}

Nach dem Login kopieren

Versuchen Sie, mehrere WS-Clients zu verwenden, um eine Verbindung herzustellen ws://localhost:3000/ws 时,我总是收到相同的错误:403-Forbidden. Ich habe sogar das Beispiel aus der offiziellen Dokumentation ausprobiert, bekomme es aber trotzdem hin. Übersehe ich etwas Offensichtliches? Zum Beispiel eine Standard-Port-Blockierung oder so etwas in der Art?

Vielen Dank im Voraus.

BEARBEITEN: Möglicherweise müssen Sie einen anderen Port verwenden, um das Problem zu reproduzieren. Die Verwendung von 3000 in meinem Beispiel unterbricht lediglich die Ausführung des Programms, wenn es nicht verfügbar ist.

Edit 2: Sie können einen Client wie websocat verwenden und websocat 'ws://localhost:3000/ws' ausführen, um zu versuchen, eine Verbindung zum Server herzustellen

Workaround

Ich habe aufgegeben, habe aber gute Erkenntnisse: Wenn Sie wie ich sind und Anthony GGs „Anleitung zum Erstellen eines Websocket-Servers für unterwegs von Grund auf“ folgen, dann tun Sie das nicht. Video ist veraltet, und obwohl es einen guten Einblick in die Erstellung von Videos bietet, ist es am besten (und keine Schande), die Verwendung der WebSocket-Bibliothek von Gorilla zu erlernen.

Ich verwende auch, um Pfadparameter zu verwenden (ich bin mir nicht sicher, warum der http-Handler das nicht kann). Beachten Sie, wie ich

hinzugefügt habe. Wie Benutzer @Cerise in den Kommentaren betonte, befindet sich das gorilla/mux-Paket nicht in der Standardbibliothek, aber auch das bloße Hinzufügen des Origin-Headers hat das ursprüngliche Problem nicht gelöst. http.Handle 更改为 mux.Router.HandleFunc x/net/websocket 包不在标准库中,但仅添加 OriginIch hoffe, das erspart anderen Leuten wie mir die Mühe, Go zu lernen.

Das obige ist der detaillierte Inhalt vonWebsocket-Server-Implementierung mithilfe der X/Net-Bibliothek Trowing 403. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage