Avec le développement continu de la technologie Internet, la connexion en temps réel est devenue une fonction essentielle pour de plus en plus d'applications. WebSocket est un protocole réseau basé sur le protocole TCP qui permet au serveur de transmettre des données au client pour établir une communication bidirectionnelle en temps réel.
Go est un langage de programmation rapide et efficace De par sa simplicité et son efficacité, il est devenu l'un des langages les plus populaires ces dernières années. Dans cet article, nous présenterons comment implémenter le service WebSocket à l'aide du langage Go.
Le protocole WebSocket est un protocole de communication full-duplex basé sur le protocole TCP qui permet une communication en temps réel entre le client et le serveur. Par rapport au mode de requête et de réponse HTTP traditionnel, WebSocket peut maintenir l'état de connexion une fois la connexion établie, permettant ainsi une communication bidirectionnelle en temps réel.
Le workflow du protocole WebSocket est le suivant :
Par rapport aux requêtes HTTP traditionnelles, les avantages de WebSocket sont les suivants :
Go est un langage émergent En raison de sa simplicité, de son efficacité, de sa sécurité et d'autres caractéristiques, de plus en plus d'équipes commencent à utiliser Go pour développer des applications réseau. Dans Go, il existe une bibliothèque standard net/http qui fournit des API pour implémenter les services HTTP et WebSocket.
Pour établir une connexion WebSocket, nous devons effectuer les opérations suivantes respectivement sur le serveur et le client :
http.HandleFunc
fonction pour enregistrer un routeur et permet à la fonction de traitement de routage correspondante d'effectuer une communication WebSocket. http.HandleFunc
函数注册一个路由器,并允许对应的路由处理函数进行 WebSocket 通信。http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { // 判断是否支持 WebSocket,如果支持则进入 WebSocket 通信处理函数。 if websocket.IsWebSocketUpgrade(r) { websocket.Handler(handleWebSocket).ServeHTTP(w, r) return } http.ServeFile(w, r, "index.html") })
func handleWebSocket(conn *websocket.Conn) { defer conn.Close() // 输出日志信息,表示已经建立连接。 log.Println("WebSocket connected") for { // 读取客户端发送过来的消息。 _, msg, err := conn.ReadMessage() if err != nil { log.Println("Read error:", err) return } // 输出日志信息,表示接收到客户端发送的消息。 log.Printf("Received: %s ", msg) // 处理完毕后,发送消息。 err = conn.WriteMessage(websocket.TextMessage, msg) if err != nil { log.Println("Write error:", err) return } } }
在客户端中,我们需要使用 JavaScript 代码进行 WebSocket 连接的操作。具体代码如下:
var socket = new WebSocket("ws://127.0.0.1:8080/"); socket.onopen = function() { console.log("WebSocket connected"); }; socket.onmessage = function(event) { console.log("Received: " + event.data); }; socket.onclose = function(event) { console.log("WebSocket closed"); }; socket.onerror = function(event) { console.log("WebSocket error: " + event.data); };
当 WebSocket 连接建立后,服务端和客户端就可以进行实时双向通信了。服务端可以通过 conn.WriteMessage
函数向客户端发送消息,客户端可以通过 socket.send
函数向服务端发送消息。
从客户端发送消息:
socket.send("Hello world");
在服务端接收并处理消息:
_, msg, err := conn.ReadMessage() if err != nil { log.Println("Read error:", err) return } log.Printf("Received: %s ", msg)
从服务端发送消息:
err = conn.WriteMessage(websocket.TextMessage, []byte("Hello world")) if err != nil { log.Println("Write error:", err) return }
在客户端接收并处理消息:
socket.onmessage = function(event) { console.log("Received: " + event.data); };
在实际开发中,WebSocket 可能会出现各种异常情况,例如网络中断、连接超时、服务器崩溃等。在 Go 中,我们可以通过错误处理来处理这些异常情况。
在服务端中,我们可以通过 defer
语句来进行资源释放,例如关闭 WebSocket 连接等。
defer conn.Close()
同时,在进行 websocket 通信处理函数的过程中,我们需要对可能发生的错误进行预处理。例如:
_, msg, err := conn.ReadMessage() if err != nil { log.Println("Read error:", err) return }
在客户端中,我们可以通过 onerror
socket.onerror = function(event) { console.log("WebSocket error: " + event.data); };
rrreee
Client🎜🎜Dans le client, nous devons utiliser du code JavaScript pour faire fonctionner la connexion WebSocket. Le code spécifique est le suivant : 🎜rrreee🎜Envoyer un message🎜🎜Lorsque la connexion WebSocket est établie, le serveur et le client peuvent établir une communication bidirectionnelle en temps réel. Le serveur peut envoyer des messages au client via la fonctionconn.WriteMessage
, et le client peut envoyer des messages au serveur via la fonction socket.send
. 🎜🎜Envoyer un message du client : 🎜rrreee🎜Recevoir et traiter le message sur le serveur : 🎜rrreee🎜Envoyer un message depuis le serveur : 🎜rrreee🎜Recevoir et traiter le message sur le client : 🎜rrreee🎜Gestion des erreurs WebSocket🎜 🎜En pratique Lors du développement, WebSocket peut rencontrer diverses situations anormales, telles qu'une interruption du réseau, un timeout de connexion, un crash du serveur, etc. Dans Go, nous pouvons gérer ces exceptions grâce à la gestion des erreurs. 🎜🎜Côté serveur, nous pouvons utiliser l'instruction defer
pour libérer des ressources, comme la fermeture de la connexion WebSocket, etc. 🎜rrreee🎜En même temps, pendant le processus de traitement des communications de Websocket, nous devons prétraiter les erreurs qui peuvent survenir. Par exemple : 🎜rrreee🎜Dans le client, nous pouvons gérer les erreurs WebSocket via l'événement onerror
, par exemple : 🎜rrreee🎜Summary🎜🎜Cet article présente comment utiliser le langage Go pour implémenter les services WebSocket, y compris l'établissement d'une connexion WebSocket, l'envoi de messages, la gestion des exceptions, etc. Le protocole WebSocket fournit une méthode de communication bidirectionnelle en temps réel et peut être utilisé dans des scénarios d'application en temps réel tels que les jeux en ligne, le chat en temps réel et la vidéo en ligne. Dans Go, le service WebSocket peut être facilement implémenté à l'aide de l'API fournie par la bibliothèque standard net/http. 🎜Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!