• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

[go]解决:concurrentwritetowebsocketconnection

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

出现这个问题是因为并发的调用了github.com/gorilla/websocket库的WriteMessage方法

在websocket连接上有多个groutinue同时调用写方法

 

go官方的解释:

websocket · pkg.go.dev

 

 

并发 
连接支持一个并发读取器和一个并发写入器。

应用程序负责确保不超过一个 goroutine 同时调用写入方法(NextWriter、SetWriteDeadline、WriteMessage、WriteJSON、EnableWriteCompression、SetCompressionLevel),并且不超过一个 goroutine 调用读取方法(NextReader、SetReadDeadline、ReadMessage、ReadJSON、SetPongHandler) , SetPingHandler) 并发。

Close 和 WriteControl 方法可以与所有其他方法可以并发调用。

 

每一个请求都是一个groutine,如果有多个groutine同时请求并且要写回数据,就会出现这个错误

 

一定要加上锁,并且在业务上避免多个同时调用

 

我遇到的问题是,我有两个结构体,但是conn是同一个,虽然每一个在调用时加了锁,只是锁定不同的结构体,所以User和Message同时调用还是有并发问题

type User struct {
    Conn       *websocket.Conn
    Name       string
    Id         string
    Avator     string
    To_id      string
    Ent_id     string
    Role_id    string
    Mux        sync.Mutex
    UpdateTime time.Time
}
type Message struct {
    conn        *websocket.Conn
    context     *gin.Context
    content     []byte
    messageType int
    Mux         sync.Mutex
}

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Go实现简单爬取豆瓣网数据发布时间:2022-07-10
下一篇:
go语言之进阶篇通过结构体生成json发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap