请教一下workerman中多个用户同时发起onmessage请求时会进程堵塞,部分用户连接中断,发送的消息堵塞怎么解决?

aaay

RT,项目是一个聊天类小程序,使用的是workerman3.x的websockert,没有使用gatewayWorker。
项目存在一个问题:当多个用户同时发送数据传送较大的文件如图片,或者发送文字之类的频率过快时会出现严重的卡顿丢包现象,部分用户连接会中断,在当前发送数据的用户发送操作未执行完成之前,所有用户都无法重连上,请问产生这个问题的原因有什么呢?我该如何尝试解决呢?
ps:项目服务器为windows,40核。

3014 1 0
1个回答

walkor

windows服务器最多支持250个连接。
 正式环境请使用linux服务器,并严格按照手册优化好linux内核并安装event扩展。
 
http://doc.workerman.net/appendices/kernel-optimization.html
http://doc.workerman.net/install/install.html
 
不要用websocket发送大的数据比如图片数据,否则会占数据传输通道导致卡顿。
比如使用同一个websocket连接发送图片数据后,再发送消息,消息会在浏览器排队等待文件发送完毕后才发送消息,导致延迟或者卡顿。 
 
发送图片最好有http 上传到文件服务器,得到url后通过websocket发送 img 标签。这样不会影响其它消息传输

  • aaay 2019-06-16

    图片是使用http传输后发送图片id回到websocket再发送数据的,这个应该不是影响的原因,但是传输完图片发送id也是根据队列排的,人多时也会堵塞,这是什么原因呢?

  • walkor 2019-06-16

    如果业务里有阻塞的操作,比如读写数据库redis等,阻塞是正常的。推荐workerman里尽量不做存储读写,只做消息转发。workerman在windows下最多支持250个连接,如果超过这个连接数,会导致消息延迟卡顿甚至断开。

年代过于久远,无法发表回答
🔝