如何解决与大猩猩websocket包并发writeJSON
Gorilla WebSocket文档提到 “应用程序负责确保不超过一个goroutine并发调用写方法,并且不超过一个goroutine并发调用读方法。”
这是否意味着即使有不同的conn ptr可以并发调用写方法,也没有两个goroutine,或者这意味着如果我们与不同的goroutine共享同一个conn ptr,那么我们就不能同时使用该conn进行写(尽管这很明显)。 ?
解决方法
每个连接支持一个并发读取器和一个并发写入器。
连接彼此独立,不共享任何状态。通常,应用程序中的所有连接都具有对read方法的调用方。
文档说明,与默认的无并发访问假设相比,连接支持更多的并发性。
,这是基本的并发控制要求,只有一个goroutine具有写锁。如果只有读取锁,则任何goroutine都可以同时读取。但是,当goroutine正在写入时,其他goroutine不应读取或写入相同的值。如果允许,这种情况会产生许多不良状态,例如脏读问题。因此,在同时写入内容时,应该始终使用互斥锁获得排他锁(写锁)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。