Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara menggunakan WebSocket untuk kawalan jauh dalam golang

Cara menggunakan WebSocket untuk kawalan jauh dalam golang

WBOY
WBOYasal
2023-12-17 20:06:561173semak imbas

Cara menggunakan WebSocket untuk kawalan jauh dalam golang

Cara menggunakan WebSocket untuk kawalan jauh dalam bahasa Go

Pengenalan:

WebSocket ialah teknologi yang membolehkan komunikasi dua hala masa nyata dalam aplikasi web. Dalam bahasa Go, kita boleh menggunakan pakej net/http dan github.com/gorilla/websocket dalam pustaka standard untuk melaksanakan komunikasi WebSocket. Artikel ini akan memperkenalkan cara menggunakan WebSocket untuk alat kawalan jauh dalam bahasa Go dan memberikan contoh kod khusus. net/httpgithub.com/gorilla/websocket包来实现WebSocket通信。本文将介绍如何使用WebSocket在Go语言中进行远程控制,并提供具体的代码示例。

步骤:

  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包来创建和管理WebSocket连接,并通过conn.ReadMessage()conn.WriteMessage()方法读取和发送消息。在客户端,我们可以通过websocket.DefaultDialer.Dial()来进行WebSocket的连接,在读取和发送消息时使用ReadMessage()WriteMessage()

Langkah: 🎜
  1. Perkenalkan pakej pergantungan
rrreee
  1. Buat pelayan WebSocket
rrreee
  1. Buat klien WebSocket
rrreee
  1. Kompil dan jalankan
rrreee🎜Ringkasan:🎜🎜Melalui perkara di atas Langkah-langkah, kita boleh menggunakan WebSocket untuk kawalan jauh dalam bahasa Go. Di bahagian pelayan, kami menggunakan pakej github.com/gorilla/websocket untuk mencipta dan mengurus sambungan WebSocket dan menghantar conn.ReadMessage() dan conn. Kaedah WriteMessage( ) untuk membaca dan menghantar mesej. Di sisi pelanggan, kami boleh menyambung ke WebSocket melalui websocket.DefaultDialer.Dial() dan menggunakan ReadMessage() dan WriteMessage apabila membaca dan menghantar mesej. )kaedah. Dengan cara ini, kami boleh menjalankan kawalan jauh secara fleksibel dan mencapai komunikasi masa nyata. 🎜

Atas ialah kandungan terperinci Cara menggunakan WebSocket untuk kawalan jauh dalam golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn