如何在GO中存储websocket连接
我想将客户端websocket连接存储到如何在GO中存储websocket连接,websocket,go,Websocket,Go,我想将客户端websocket连接存储到wsList,并以统一的方式发送响应。但它将返回“使用封闭网络连接”。如何修复它 import { "code.google.com/p/go.net/websocket" ... } var wsList []*websocket.Conn func WShandler(ws *websocket.Conn) { wsList = append(wsList, ws) go sendmsg() } func sen
wsList
,并以统一的方式发送响应。但它将返回“使用封闭网络连接”。如何修复它
import {
"code.google.com/p/go.net/websocket"
...
}
var wsList []*websocket.Conn
func WShandler(ws *websocket.Conn) {
wsList = append(wsList, ws)
go sendmsg()
}
func sendmsg() {
for _, conn := range wsList {
if err := websocket.JSON.Send(conn, outmsg); err != nil {
fmt.Printf("%s", err) //"use of closed network connection"
}
}
}
您不能简单地假设所有连接无限期地保持打开状态,因为另一端可能会随意关闭它们,或者可能发生网络中断,迫使它们也关闭 当您尝试读取或写入一个关闭的连接时,您会得到一个错误
"use of closed network connection"
您应该放弃已关闭的连接。您不能简单地假设所有连接都无限期地保持打开状态,因为另一端可能会随意关闭它们,或者可能发生网络中断,迫使它们也关闭 当您尝试读取或写入一个关闭的连接时,您会得到一个错误
"use of closed network connection"
您应该放弃关闭的连接。当
WsHandler
返回时,连接ws
将关闭。要解决此问题,请通过读取循环中的消息防止WsHandler
返回,直到检测到错误:
func WShandler(ws *websocket.Conn) {
wsList = append(wsList, ws)
go sendmsg()
for {
var s string
if err := websocket.Message.Receive(ws, &s); err != nil {
break
}
}
// remove ws from wsList here
}
名单上有一场比赛。使用互斥锁保护它。当
WsHandler
返回时,连接ws
关闭。要解决此问题,请通过读取循环中的消息防止WsHandler
返回,直到检测到错误:
func WShandler(ws *websocket.Conn) {
wsList = append(wsList, ws)
go sendmsg()
for {
var s string
if err := websocket.Message.Receive(ws, &s); err != nil {
break
}
}
// remove ws from wsList here
}
名单上有一场比赛。用互斥锁保护它。你用的是哪个
websocket
软件包?我用的是code.google.com/p/go.net/websocket
你用的是哪个websocket
软件包?我用的是code.google.com/p/go.net/websocket
,但我在sendmsg
中找不到任何活的连接,这是否意味着当WShandler()
return,连接已关闭?调用WShandler的任何调用都可能会关闭连接,是的,如果是这样,我如何维护客户端连接列表,只要我想向它们发送一些数据。删除go
此处:go sendmsg()
。但是我无法在sendmsg
中获得任何活动连接,这是否意味着当WShandler()
返回时,连接被关闭?无论调用WShandler的是什么,都可能关闭连接,是的。如果是这样,每当我想向客户端发送数据时,我如何维护客户端连接的列表。删除go
此处:go sendmsg()
。