将Websocket消息发送到Go中的特定客户端(使用Gorilla)

将Websocket消息发送到Go中的特定客户端(使用Gorilla),第1张

将Websocket消息发送到Go中的特定客户端(使用Gorilla)

聊天示例显示了如何实现广播。如果不需要广播,则聊天示例不是应用程序的理想起点。

要将消息发送到特定的websocket连接,只需使用NextWriter或WriteMessage写入该连接。这些方法不支持并发编写器,因此您可能需要使用互斥量或goroutine来确保使用单个编写器。

查找特定

*websocket.Connection
内容的简单方法是将其传递
*websocket.Connection
给需要它的代码。如果应用程序需要将其他状态与连接相关联,则定义一个类型以保留该状态并向其传递指针:

type Client struct {    conn *websocket.Conn    mu sync.Mutex    ...}

Hub
可以进行修改,以将消息发送到特定的连接,但如果不需要广播这是一个迂回路径。方法如下:

将ID字段添加到客户端

 ID idType // replace idType with int, string, or whatever you want to use

将Gorilla中心字段从更改

connections map[*connection]bool
connectionsmap[idType]*connection

定义包含消息数据和目标客户端ID的消息类型:

type message struct {   ID idtype   data []byte}

将集线器广播字段替换为:

   send chan message

将循环中心更改为:

for {    select {    case client := <-h.register:        h.clients[client.ID] = client    case client := <-h.unregister:        if _, ok := h.clients[client.ID]; ok { delete(h.clients, client.ID) close(client.send)        }    case message := <-h.send:        if client, ok := h.clients[message.ID]; ok { select { case client.send <- message.data: default:     close(client.send)     delete(h.connections, client) }        }    }

通过创建

message
具有适当ID的将邮件发送到特定客户端:

   hub.send <- message{ID: targetID, data: data}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4933478.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-12
下一篇 2022-11-13

发表评论

登录后才能评论

评论列表(0条)

保存