In den letzten Jahren hat die Websocket-Technologie mit der rasanten Entwicklung der Internet-Technologie zunehmend Aufmerksamkeit und Aufmerksamkeit erregt. Websocket ist ein Vollduplex-Kommunikationsprotokoll, das auf dem TCP-Protokoll basiert und eine bidirektionale Kommunikation zwischen Webanwendungen und Servern ermöglicht. Mithilfe der Websocket-Technologie können wichtige Echtzeitverbindungen hergestellt werden, während gleichzeitig Netzwerkverzögerungen reduziert und die Effizienz der Datenübertragung verbessert werden. In diesem Artikel wird erläutert, wie Sie mithilfe der Websocket-Technologie Daten in Golang weiterleiten.
1. Funktionsprinzip von Websocket
Der Prozess der Websocket-Kommunikation besteht aus vier Schritten:
1. Verbindungsaufbau: Der Client sendet ein HTTP Anfrage an den Server, Upgrade auf Websocket-Protokoll.
2. Handshake: Der Server bestätigt die Anfrage und stellt eine Websocket-Verbindung her.
3. Kommunikation: Wie wir alle wissen, ist HTTP ein zustandsloses Protokoll. Sobald eine HTTP-Verbindung zwischen dem Client und dem Server hergestellt wird, wird diese sofort getrennt. Gemäß diesem Protokoll müssen Client und Server bei der Kommunikation Anforderungs- und Antwortnachrichten senden. Sobald der Client jedoch eine Verbindung mit dem Server herstellt, kann er im Websocket-Protokoll eine dauerhafte Verbindung aufrechterhalten, ohne HTTP-Anforderungs- und Antwortnachrichten mehrmals senden zu müssen.
4. Schließen: Der Client oder Server trennt die Websocket-Verbindung.
Es ist ersichtlich, dass Websocket sich vom HTTP-Protokoll unterscheidet. Das HTTP-Protokoll unterstützt nur die Übertragung von Anforderungs- und Antwortnachrichten, während das Websocket-Protokoll die bidirektionale Kommunikation in Echtzeit unterstützt.
2. Verwendung der Websocket-Technologie in Golang
In Golang können Sie die Drittanbieterbibliothek golang.org/x/net/websocket verwenden, um die Websocket-Kommunikation zu implementieren. golang.org/x/net/websocket ist eine Standardbibliothek von Golang, die das Websocket-Kommunikationsprotokoll problemlos implementieren kann.
1. Installation
In Golang ist die Installation von golang.org/x/net/websocket sehr einfach, geben Sie einfach den folgenden Befehl in die Befehlszeile ein: #🎜 🎜#
go get golang.org/x/net/websocket
package main import ( "golang.org/x/net/websocket" "log" "net/http" ) func echoHandler(ws *websocket.Conn) { if err := websocket.Message.Send(ws, "Hello, Client!"); err != nil { log.Fatal(err) } } func main() { http.Handle("/", websocket.Handler(echoHandler)) err := http.ListenAndServe(":8080", nil) if err != nil { log.Fatal(err) } }
package main import ( "fmt" "golang.org/x/net/websocket" "log" ) func main() { origin := "http://localhost" url := "ws://localhost:8080/" ws, err := websocket.Dial(url, "", origin) if err != nil { log.Fatal(err) } var msg = make([]byte, 512) var n int if n, err = ws.Read(msg); err != nil { log.Fatal(err) } fmt.Printf("Received: %s.\n", msg[:n]) }
package main import ( "golang.org/x/net/websocket" "log" "net/http" ) // 保存所有的客户端连接 var clients []*websocket.Conn func broadcast() { for { var data []byte // 从所有客户端接收数据 for i := range clients { if err := websocket.Message.Receive(clients[i], &data); err != nil { // 如果有任何错误,则断开客户端连接 clients[i].Close() log.Printf("Client %v disconnected\n", clients[i].RemoteAddr()) // 将已关闭客户端从clients中删除 clients = append(clients[:i], clients[i+1:]...) continue } // 向其他所有客户端广播数据 for j := range clients { if err := websocket.Message.Send(clients[j], data); err != nil { log.Printf("Unable to send message to %v: %v\n", clients[j].RemoteAddr(), err) } } } } } func main() { // 启动一个广播协程 go broadcast() http.Handle("/", websocket.Handler(func(ws *websocket.Conn) { // 保存每个新连接 clients = append(clients, ws) log.Printf("Client %v connected\n", ws.RemoteAddr()) })) err := http.ListenAndServe(":8080", nil) if err != nil { log.Fatal(err) } }
Das obige ist der detaillierte Inhalt vonSo verwenden Sie Websocket in Golang zum Weiterleiten von Daten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!