2 回答
TA贡献1815条经验 获得超13个赞
我遇到了与您的问题类似的问题,我需要多个连接,每个连接都通过多个服务器相互发送数据。
我使用了WAMP协议
WAMP is an open standard WebSocket subprotocol that provides two application messaging patterns in one unified protocol:
Remote Procedure Calls + Publish & Subscribe.
你也可以看看我的一个项目,它是用 go 编写的,并使用了手头的协议:github.com/neutrinoapp/neutrino
TA贡献1858条经验 获得超8个赞
在 Go 中使用互斥锁并没有错。这是使用互斥锁的解决方案。
声明端点映射。我假设字符串键足以识别端点:
type endpoint struct {
c *websocket.Conn
sync.Mutex // protects write to c
}
var (
endpoints = map[string]*endpoint
endpointsMu sync.Mutex // protects endpoints
)
func addEndpoint(key string, c *websocket.Connection) {
endpointsMu.Lock()
endpoints[key] = &endpoint{c:c}
endpointsMu.Unlock()
}
func removeEndpoint(key string) {
endpointsMu.Lock()
delete(endpoints, key)
endpointsMu.Unlock()
}
func sendToEndpoint(key string, message []byte) error {
endpointsMu.Lock()
e := endpoints[key]
endpointsMu.Unlock()
if e === nil {
return errors.New("no endpoint")
}
e.Lock()
defer e.Unlock()
return e.c.WriteMessage(websocket.TextMessage, message)
}
addEndpoint当客户端连接时,将连接添加到地图。removeEndpoint关闭连接时从地图中删除连接。使用 将消息发送到命名端点sendToEndpoint。
该大猩猩聊天例如可以适用于解决这个问题。将集线器映射更改为connections map[string]*connection,更新通道以发送具有连接和密钥的类型,并将广播循环更改为发送到单个连接。
- 2 回答
- 0 关注
- 131 浏览
添加回答
举报