(websocket)Golang失败的同步数据锁定 - 断管

时间:2014-10-07 09:50:45

标签: concurrency go websocket locking

我目前正在尝试编写一个简单的websocket,当有人加入或离开websocket连接池时,它会列出每个连接客户端的所有客户端列表。

目前我正在使用(R)锁定和解锁来确保正在进行并发连接以避免连接之间的任何干扰。 每当我尝试访问连接池时,我将其锁定,这包括读取和写入池,但出于某些奇怪的原因,只有当我通过一次发送100个并发连接来强制使用websocket并且我结束它们时我得到了一个断管错误

从外观上看,错误发生在删除客户端并广播新客户端列表后。

你能弄明白为什么当某人失去连接时,它没有将连接池发送给每个客户端吗?请记住,只有当我通过创建100个连接的for循环来强制执行websocket连接时才会发生这种情况,当结束连接列表时它会失败。

我在失败的地方添加了一个注释。


另一方面的注意事项是,如果你们有更好的方式发送连接池,那么通过循环并将UUID存储到字符串数组中,然后随时告诉我它,但是现在我是' m我主要关注调试这个问题,因为我想知道我失败的地方。

编辑:忘记添加来源:

Websocket来源:https://gist.github.com/anonymous/eaaf2e5430ed694bc424

压力测试来源:https://gist.github.com/anonymous/92ad79ffee1afdfd3382

1 个答案:

答案 0 :(得分:3)

事实证明,在broadcastMessage中捕获它时,异常似乎只是一个问题(请参阅websocket源代码)。

如您所见,我在broadcastMessage函数中捕获了WriteMessage的错误。 不完全确定为什么它不是一个问题,而不是捕捉它,但我会创建另一个问题。

非常感谢那些选择阅读我遇到的问题的人!

对于有兴趣的人,这里是帖子https://stackoverflow.com/questions/26235760/golang-websocket-broken-pipe-error-only-when-catching-sending-message-to-clien