WebSocket を Go 言語でリモート制御に使用する方法
はじめに:
WebSocket は、リアルタイムの双方向通信を実現する方法です。 Web アプリケーション技術。 Go 言語では、標準ライブラリの net/http
および github.com/gorilla/websocket
パッケージを使用して WebSocket 通信を実装できます。この記事では、Go 言語でリモート制御に WebSocket を使用する方法と具体的なコード例を紹介します。
手順:
go get github.com/gorilla/websocket
package main import ( "log" "net/http" "github.com/gorilla/websocket" ) var upgrader = websocket.Upgrader{} func wsHandler(w http.ResponseWriter, r *http.Request) { conn, err := upgrader.Upgrade(w, r, nil) if err != nil { log.Fatal(err) } defer conn.Close() for { // 读取客户端消息 messageType, p, err := conn.ReadMessage() if err != nil { log.Println(err) return } // 处理客户端消息 // doSomething(p) // 响应客户端消息 err = conn.WriteMessage(messageType, p) if err != nil { log.Println(err) return } } } func main() { http.HandleFunc("/ws", wsHandler) log.Fatal(http.ListenAndServe(":8080", nil)) }
package main import ( "log" "net/url" "os" "os/signal" "time" "github.com/gorilla/websocket" ) func main() { interrupt := make(chan os.Signal, 1) signal.Notify(interrupt, os.Interrupt) u := url.URL{Scheme: "ws", Host: "localhost:8080", Path: "/ws"} log.Printf("connecting to %s", u.String()) c, _, err := websocket.DefaultDialer.Dial(u.String(), nil) if err != nil { log.Fatal("dial:", err) } defer c.Close() done := make(chan struct{}) // 启动读取协程 go func() { defer c.Close() defer close(done) for { _, message, err := c.ReadMessage() if err != nil { log.Println("read:", err) return } // 处理服务器消息 // doSomething(message) } }() // 启动写入协程 go func() { defer c.Close() defer close(done) for { // 写入消息到服务器 err := c.WriteMessage(websocket.TextMessage, []byte("Hello, Server!")) if err != nil { log.Println("write:", err) return } time.Sleep(time.Second) } }() // 等待中断信号,优雅地关闭连接 for { select { case <-done: return case <-interrupt: log.Println("interrupt") return } } }
$ go build server.go $ go build client.go $ ./server $ ./client
概要:
上記の手順により、Go 言語リモート コントロールで WebSocket を使用できるようになります。 。サーバー側では、github.com/gorilla/websocket
パッケージを使用して、conn.ReadMessage()
および conn.WriteMessage()# を通じて WebSocket 接続を作成および管理します。 ##メッセージを読み取って送信するメソッド。クライアント側では、
websocket.DefaultDialer.Dial() を通じて WebSocket に接続し、メッセージの読み取りと送信時に
ReadMessage() および
WriteMessage() を使用できます。 ##方法。これにより、柔軟な遠隔制御とリアルタイムコミュニケーションを実現します。
以上がGolang で WebSocket を使用してリモート制御する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。