Concurrency (websocket)Golang同步数据锁定失败-管道断裂

Concurrency (websocket)Golang同步数据锁定失败-管道断裂,concurrency,go,websocket,locking,Concurrency,Go,Websocket,Locking,我目前正试图编写一个简单的websocket,当有人加入或离开websocket连接池时,它会列出每个连接的客户端的所有客户端列表 目前,我正在使用(R)锁定和解锁来确保存在并发连接,以避免连接之间的任何干扰。 每当我尝试访问连接池时,我都会锁定它,这包括对连接池的读写,但出于某种奇怪的原因,只有当我通过一次发送100个并发连接来强制执行websocket时,我会终止所有连接,我会得到一个断开的管道错误 从外观上看,该错误发生在删除客户端并广播新客户端列表之后 你能找出为什么当有人断开连接时,它

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

目前,我正在使用(R)锁定和解锁来确保存在并发连接,以避免连接之间的任何干扰。 每当我尝试访问连接池时,我都会锁定它,这包括对连接池的读写,但出于某种奇怪的原因,只有当我通过一次发送100个并发连接来强制执行websocket时,我会终止所有连接,我会得到一个断开的管道错误

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

你能找出为什么当有人断开连接时,它无法将连接池发送到每个客户端吗?请记住,只有当我通过创建100个连接的for循环来强制websocket连接时,才会发生这种情况,而当结束连接列表时,它将失败

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


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

编辑:忘记添加源: Websocket来源:


压力测试源:

因此,只有在broadcastMessage中捕获异常时(请参阅websocket源代码),异常才似乎是一个问题

如您所见,我在broadcastMessage函数中捕获了WriteMessage错误。 我不完全确定为什么它不是一个问题时,没有抓住它,但我会创造另一个问题

无论如何,感谢那些选择阅读我的文章的人,因为我遇到了问题

对于那些感兴趣的人,这里是帖子