Gorilla websocket是否支持不同WebSocket连接的并发读写操作?
Gorilla WebSocket 并发限制问题解答
Gorilla WebSocket 文档中提到的并发读写限制,仅针对单个
*websocket.Conn连接实例生效,并非全局限制。
每个WebSocket连接实例都是完全独立的,各自持有独立的网络句柄、读写缓冲区和连接状态,不同连接之间的操作不存在共享状态冲突,因此:
- 你完全可以并发对A连接执行读操作、同时对B连接执行写操作,这类跨不同连接的并发操作是完全安全的,没有任何限制。
- 仅当操作同一个连接时,需要遵守官方的并发约束:同一个连接同一时间最多允许1个并发读操作、最多允许1个并发写操作,不能有多个goroutine同时读同一个连接,也不能有多个goroutine同时写同一个连接。
常规实现参考
行业通用的实现方案是为每个接入的客户端连接单独启动2个goroutine:一个协程专门负责该连接的所有读操作,另一个协程专门负责该连接的所有写操作,不同连接的协程之间完全独立运行,不需要额外加锁,该模式完全符合Gorilla WebSocket的并发安全要求。
内容的提问来源于stack exchange,提问作者Abhishek
相关产品推荐
相关产品推荐

