Golang で WebSocket を使用してリモート制御する方法

WBOY
リリース: 2023-12-17 20:06:56
オリジナル
1206 人が閲覧しました

Golang で WebSocket を使用してリモート制御する方法

WebSocket を Go 言語でリモート制御に使用する方法

はじめに:

WebSocket は、リアルタイムの双方向通信を実現する方法です。 Web アプリケーション技術。 Go 言語では、標準ライブラリの net/http および github.com/gorilla/websocket パッケージを使用して WebSocket 通信を実装できます。この記事では、Go 言語でリモート制御に WebSocket を使用する方法と具体的なコード例を紹介します。

手順:

  1. 依存関係パッケージの導入
go get github.com/gorilla/websocket
ログイン後にコピー
  1. 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))
}
ログイン後にコピー
  1. 作成WebSocket クライアント
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
        }
    }
}
ログイン後にコピー
  1. コンパイルと実行
$ 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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート