在Gorilla服务器中,可以通过WebSocket连接发送消息给指定的客户端。下面是一个简单的例子:

package main

import (
    "fmt"
    "log"
    "net/http"

    "github.com/gorilla/websocket"
)

var upgrader = websocket.Upgrader{
    ReadBufferSize:  1024,
    WriteBufferSize: 1024,
}

func main() {
    http.HandleFunc("/", handler)
    log.Fatal(http.ListenAndServe(":8080", nil))
}

func handler(w http.ResponseWriter, r *http.Request) {
    conn, err := upgrader.Upgrade(w, r, nil)
    if err != nil {
        log.Println(err)
        return
    }
    defer conn.Close()

    // 读取客户端发送的消息
    for {
        _, message, err := conn.ReadMessage()
        if err != nil {
            log.Println("read:", err)
            break
        }
        log.Printf("recv: %s", message)

        // 发送消息给指定的客户端
        err = conn.WriteMessage(websocket.TextMessage, []byte("Hello, client!"))
        if err != nil {
            log.Println("write:", err)
            break
        }
    }
}

在上面的例子中,当客户端连接到服务器时,服务器会将连接升级为WebSocket连接。然后,服务器将等待客户端发送消息。当服务器收到消息时,它将发送一条消息给客户端。

要将消息发送给指定的客户端,您需要在服务器端维护一个客户端列表。当服务器收到消息时,它可以遍历此列表,并将消息发送给指定的客户端。这里是一个示例:

package main

import (
    "fmt"
    "log"
    "net/http"

    "github.com/gorilla/websocket"
)

var upgrader = websocket.Upgrader{
    ReadBufferSize:  1024,
    WriteBufferSize: 1024,
}

// 客户端结构体
type Client struct {
    conn *websocket.Conn
}

// 客户端列表
var clients = make(map[*Client]bool)

func main() {
    http.HandleFunc("/", handler)
    log.Fatal(http.ListenAndServe(":8080", nil))
}

func handler(w http.ResponseWriter, r *http.Request) {
    conn, err := upgrader.Upgrade(w, r, nil)
    if err != nil {
        log.Println(err)
        return
    }
    defer conn.Close()

    // 创建新的客户端
    client := &Client{conn}

    // 将客户端添加到列表中
    clients[client] = true

    // 读取客户端发送的消息
    for {
        _, message, err := conn.ReadMessage()
        if err != nil {
            log.Println("read:", err)

            // 从列表中删除客户端
            delete(clients, client)

            break
        }
        log.Printf("recv: %s", message)

        // 发送消息给所有客户端
        for c := range clients {
            if c != client {
                err = c.conn.WriteMessage(websocket.TextMessage, []byte("Hello, client!"))
                if err != nil {
                    log.Println("write:", err)
                    break
                }
            }
        }
    }
}

在上面的例子中,当客户端连接到服务器时,服务器会将连接升级为WebSocket连接。然后,服务器将创建一个新的客户端,并将其添加到客户端列表中。当服务器收到消息时,它会遍历客户端列表,并将消息发送给除发送方外的所有客户端。如果客户端关闭连接,服务器将从客户端列表中删除该客户端。

golang Gorilla 服务器发送消息给指定的客户端

原文地址: https://www.cveoy.top/t/topic/siO 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录