Comment implémenter une communication bidirectionnelle avec WebSocket dans Golang
WebSockets est un protocole de communication qui établit une connexion persistante entre le client et le serveur. Il permet une communication bidirectionnelle et est excellent en temps réel et en efficacité. Dans Golang, nous pouvons utiliser les packages net/http
et gorilla/websocket
dans la bibliothèque standard pour implémenter la communication bidirectionnelle WebSocket. Cet article présentera comment implémenter la communication bidirectionnelle WebSocket dans Golang et fournira des exemples de code spécifiques. net/http
和 gorilla/websocket
包来实现 WebSocket 的双向通信。本文将介绍如何在 Golang 中实现 WebSocket 的双向通信,并提供具体的代码示例。
步骤一:导入依赖包
首先,我们需导入 net/http
和 gorilla/websocket
包。net/http
包提供了 HTTP 服务器和客户端的功能,而 gorilla/websocket
包则是一个 WebSocket 实现库。
import ( "log" "net/http" "github.com/gorilla/websocket" )
步骤二:设置 WebSocket 处理函数
接下来,我们需要设置 WebSocket 的处理函数。这个函数将会处理客户端的连接请求,并在连接建立成功后,处理客户端发送的消息。
func websocketHandler(w http.ResponseWriter, r *http.Request) { // 将 HTTP 连接升级为 WebSocket 连接 ws, err := upgrader.Upgrade(w, r, nil) if err != nil { log.Println("Error upgrading HTTP connection to WebSocket:", err) return } // 在连接结束时关闭 WebSocket defer ws.Close() // 循环处理客户端发来的消息 for { // 读取客户端发来的消息 messageType, message, err := ws.ReadMessage() if err != nil { log.Println("Error reading message from WebSocket:", err) break } // 打印收到的消息 log.Printf("Received message: %s", message) // 回复客户端收到的消息 if err = ws.WriteMessage(messageType, message); err != nil { log.Println("Error writing message to WebSocket:", err) break } } }
步骤三:设置 WebSocket 升级器
在处理函数中,我们需要使用 gorilla/websocket
包的升级器(upgrader
)来将 HTTP 连接升级为 WebSocket 连接。升级器还可以设置一些参数,例如允许的域以及握手超时时间。
var upgrader = websocket.Upgrader{ // 允许跨域访问 CheckOrigin: func(r *http.Request) bool { return true }, }
步骤四:设置 HTTP 服务器
最后,我们需要设置 HTTP 服务器,将处理函数映射到相应的路径上,以便客户端可以通过路径连接到 WebSocket。
func main() { // 设置 WebSocket 处理函数 http.HandleFunc("/", websocketHandler) // 启动 HTTP 服务器 err := http.ListenAndServe(":8080", nil) if err != nil { log.Fatal("Error starting HTTP server:", err) } }
代码示例中的 :8080
net/http
et gorilla/websocket
. Le package net/http
fournit des fonctionnalités de serveur et de client HTTP, tandis que le package gorilla/websocket
est une bibliothèque d'implémentation WebSocket. const socket = new WebSocket("ws://localhost:8080/"); socket.addEventListener("open", (event) => { socket.send("Hello, server!"); }); socket.addEventListener("message", (event) => { console.log("Received message from server:", event.data); }); socket.addEventListener("close", (event) => { console.log("Server connection closed:", event); });
upgrader
) du package gorilla/websocket
pour mettre à niveau le Connexion HTTP à la connexion WebSocket. Le programme de mise à niveau peut également définir certains paramètres tels que les domaines autorisés et le délai d'expiration de la négociation. 🎜rrreee🎜Étape 4 : Configurer le serveur HTTP🎜🎜Enfin, nous devons configurer le serveur HTTP et mapper la fonction de traitement au chemin correspondant afin que le client puisse se connecter à WebSocket via le chemin. 🎜rrreee🎜:8080
dans l'exemple de code est l'adresse d'écoute et le numéro de port du serveur, vous pouvez le modifier selon vos besoins. 🎜🎜En utilisant le code ci-dessus, nous avons implémenté avec succès la fonction de communication bidirectionnelle via WebSocket dans Golang. Une fois la connexion client réussie, vous pouvez utiliser un code similaire au suivant pour envoyer et recevoir des messages : 🎜rrreee🎜En résumé, nous avons présenté en détail comment implémenter la communication bidirectionnelle WebSocket dans Golang et fourni des exemples de code spécifiques. Grâce à ces exemples de codes, vous pouvez rapidement démarrer et implémenter des fonctions de communication en temps réel basées sur WebSocket. 🎜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!