Comment créer un serveur WebSocket à l'aide de golang
WebSocket est un protocole qui permet une communication bidirectionnelle entre un client et un serveur. Il nous permet de transférer des données entre le client et le serveur via une connexion persistante. Dans cet article, je vais vous présenter comment créer un serveur WebSocket simple à l'aide de Golang et fournir des exemples de code spécifiques.
net/http
et github.com/gorilla/websocket
. net/http
est utilisé pour créer un serveur HTTP et gorilla/websocket
est utilisé pour gérer les connexions WebSocket. net/http
和github.com/gorilla/websocket
这两个依赖包。net/http
用于创建HTTP服务器,gorilla/websocket
用于处理WebSocket连接。import ( "net/http" "github.com/gorilla/websocket" )
http.HandleFunc()
函数来处理WebSocket连接请求,并使用websocket.Upgrade()
函数将HTTP协议升级为WebSocket协议。func wsHandler(w http.ResponseWriter, r *http.Request) { upgrader := websocket.Upgrader{ CheckOrigin: func(r *http.Request) bool { return true }, } conn, err := upgrader.Upgrade(w, r, nil) if err != nil { log.Println("Upgrade error:", err) return } // 在这里处理WebSocket连接 }
在wsHandler()
函数中,我们创建了一个Upgrader
对象,并设置了CheckOrigin
属性为一个匿名函数,返回true表示接受所有的跨域请求。
接下来,我们使用Upgrade()
函数将HTTP协议升级为WebSocket协议,如果升级失败则打印错误信息并返回。如果升级成功,我们可以使用conn
对象来处理WebSocket连接。
conn
对象进行读写操作。下面是一个简单的处理示例:for { messageType, message, err := conn.ReadMessage() if err != nil { log.Println("Read error:", err) break } log.Println("received message:", string(message)) err = conn.WriteMessage(messageType, message) if err != nil { log.Println("Write error:", err) break } }
在上面的示例中,我们使用ReadMessage()
函数读取客户端发送的消息,并使用WriteMessage()
函数将消息回传给客户端。如果读取或写入过程中出现错误,我们打印错误信息并跳出循环。
http.HandleFunc()
函数将wsHandler()
函数注册为处理WebSocket连接的处理器,并使用http.ListenAndServe()
函数在指定端口上启动WebSocket服务器。func main() { http.HandleFunc("/ws", wsHandler) log.Println("WebSocket server started.") err := http.ListenAndServe(":8080", nil) if err != nil { log.Fatal("ListenAndServe error:", err) } }
在上面的示例中,我们将wsHandler()
http.HandleFunc()
pour gérer les demandes de connexion WebSocket, et utilisons websocket.Upgrade()La fonction met à niveau le protocole HTTP vers le protocole WebSocket. <br>
wsHandler()
, nous avons créé un objet Upgrader
et défini l'attribut CheckOrigin
sur une fonction anonyme, renvoyant de vrais moyens accepter toutes les demandes inter-domaines.
Ensuite, nous utilisons la fonction Upgrade()
pour mettre à niveau le protocole HTTP vers le protocole WebSocket. Si la mise à niveau échoue, un message d'erreur sera imprimé et renvoyé. Si la mise à niveau réussit, nous pouvons utiliser l'objet conn
pour gérer la connexion WebSocket.
conn
pour les opérations de lecture et d'écriture. Voici un exemple de traitement simple : 🎜🎜rrreee🎜Dans l'exemple ci-dessus, nous utilisons la fonction ReadMessage()
pour lire le message envoyé par le client, et utilisons WriteMessage()
La fonction renvoie le message au client. Si une erreur se produit lors de la lecture ou de l'écriture, nous imprimons le message d'erreur et sortons de la boucle. 🎜http.HandleFunc()
pour enregistrer la fonction wsHandler()
comme gestionnaire de WebSocket serveur de connexions et utilisez la fonction http.ListenAndServe()
pour démarrer le serveur WebSocket sur le port spécifié. 🎜🎜rrreee🎜Dans l'exemple ci-dessus, nous avons enregistré la fonction wsHandler()
en tant que gestionnaire du chemin "/ws". Vous pouvez personnaliser le chemin selon vos besoins. 🎜🎜🎜Test client🎜Maintenant que nous avons terminé la création d'un serveur WebSocket, nous pouvons communiquer avec lui en utilisant n'importe quel client prenant en charge le protocole WebSocket. Vous pouvez tester cela à l'aide des outils de développement de votre navigateur ou utiliser certains outils de test WebSocket. 🎜🎜🎜Résumé🎜Cet article explique comment créer un serveur WebSocket simple à l'aide de Golang et fournit des exemples de code spécifiques. Il est très simple de créer un serveur WebSocket à l'aide de Golang et il peut facilement établir une communication bidirectionnelle. J'espère que cet article vous aidera à comprendre et à utiliser 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!