代码 > 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干嘛……

点击登录