Apprenez les fonctions de programmation réseau en langage Go et implémentez la communication WebSocket
Introduction
Le langage Go, en tant que langage de programmation puissant, est largement utilisé dans le domaine de la programmation réseau. Il fournit une multitude de fonctions et de bibliothèques de programmation réseau, permettant aux développeurs de mettre en œuvre facilement diverses fonctions de communication réseau. Cet article présentera certaines fonctions de programmation réseau couramment utilisées dans le langage Go et combinera des exemples pour implémenter la communication WebSocket.
1. Fonction de programmation réseau
net.Listen
Signature de fonction : func Listen (réseau, chaîne d'adresse) (Listener, erreur)
Objectif : écouter l'adresse réseau spécifiée et renvoyer un objet Listener
Exemple :
listener, err := net.Listen("tcp", "127.0.0.1:8080") if err != nil { log.Fatal(err) } defer listener.Close()
Accepter
Signature de fonction : func (l *TCPListener) Accept() (Conn, erreur)
Objectif : Accepter la demande de connexion et renvoyer un objet Conn
Exemple :
conn, err := listener.Accept() if err != nil { log.Fatal(err) } defer conn.Close()
gorilla/websocket
pour implémenter facilement les fonctions de communication WebSocket. gorilla/websocket
库来方便地实现WebSocket通信功能。二、实现WebSocket通信
安装gorilla/websocket
gorilla/websocket
go get -u github.com/gorilla/websocket
package main import ( "log" "net/http" "github.com/gorilla/websocket" ) var upgrader = websocket.Upgrader{ ReadBufferSize: 1024, WriteBufferSize: 1024, } func websocketHandler(w http.ResponseWriter, r *http.Request) { conn, err := upgrader.Upgrade(w, r, nil) if err != nil { log.Fatal(err) } defer conn.Close() for { messageType, message, err := conn.ReadMessage() if err != nil { log.Println(err) break } log.Printf("Received message: %s ", message) if err := conn.WriteMessage(messageType, message); err != nil { log.Println(err) break } } } func main() { http.HandleFunc("/websocket", websocketHandler) log.Fatal(http.ListenAndServe(":8080", nil)) }
Client -side code
package main import ( "log" "net/url" "github.com/gorilla/websocket" ) func main() { u := url.URL{Scheme: "ws", Host: "localhost:8080", Path: "/websocket"} conn, _, err := websocket.DefaultDialer.Dial(u.String(), nil) if err != nil { log.Fatal(err) } defer conn.Close() for i := 0; i < 5; i++ { message := []byte("Hello from client") if err := conn.WriteMessage(websocket.TextMessage, message); err != nil { log.Fatal(err) } _, receivedMessage, err := conn.ReadMessage() if err != nil { log.Fatal(err) } log.Printf("Received message from server: %s", receivedMessage) } }
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!