如何在GO中存储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

我想将客户端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 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()