我有一个简单的Express + Socket.io应用程序通过Nginx反向代理进行汇集。这个应用程序已经运行了几个月,但最近使用量有所增加。
部分应用程序有一个用户可以提交数据的部分,然后是一个可以查看数据的管理面板。管理面板由Socket.io提供服务,因此它会在新数据进入时进行实时更新。
当加载管理面板时,它会向服务器发送初始请求以获取数据,服务器会检查用户是否经过身份验证,然后再发送数据,如下所示进行聚合:
var data = {
listOfBRSystems: listOfBRSystems,
submittedReports: submittedReports,
coloredSystems: coloredSystems
}
socket.emit('adminData', data);
这可以正常工作,直到某个点,当客户端请求时它突然停止发送该数据。客户端控制台显示错误:
WebSocket connection to https://x.xxx/ failed: WebSocket is closed before the connection is established.
但是,如果我从三个变量中删除任何数据,那么它会再次正常工作,直到提交更多数据,将其推到某个阈值。我无法弄清楚这个阈值实际上是什么或在哪里。
这里有一些数据变量的统计数据,基于它的导出就像它开始失败一样:
Size: 125,748 bytes
Count of Objects: 1098
我估计它会在~125,500字节左右开始失败。我无法看到这两个可能导致套接字失败的项目有什么特别之处,但是socket.io可能会产生额外的开销或者推高字节数。
Nginx,Express或Socket.io中是否存在可能导致此类问题的限制?