代码 > github.com/googollee/go-socket.io的两个坑
2020-05-26
几年前的项目用过socket.io,用了github.com/googollee/go-socket.io这个库起了服务。
最近需要做一点升级,发现了几个蛋疼的坑。
1.BroadcastToRoom反应迟缓
这个好分析,爬了下代码,broadcast的时候是同步的……同步的……同步的……,不是并发的。
万一有连接超时,必须等超时的连接过了timeout才能发下一个……
真有想法。
解决方案:用ForEach方法自己实现一下
func BroadcastToRoom(s *socketio.Server, nsp string, room string, event string, args ...interface{}) {
s.ForEach(nsp, room, func(c socketio.Conn) {
go func() {
c.Emit(event, args)
}()
})
}
2.400错误,提交的信息丢失
这个怕了整个代码,无解。
首先,有错误后不打任何日志,直接返400错误,这个操作略骚
其次,明明每次请求不是异步的,偏要解析payload搞几个chanel搞成异步,然后有pause和resume的状态,判断了pause会报错,这个我也没抓到点。
参考
https://github.com/googollee/go-engine.io/issues/82
解决方案:
检查代码后,websocket没对应的方法……
客户端强制使用websocket....
强制使用websocket我还走一层socket.io干嘛……
点击登录