好的,我有一个在本地运行良好的应用程序。前几天我将其部署到 Azure,并且经常收到错误:
IIS 详细错误 - 503.0 - 事件 WebSocket 请求数已达到允许的最大并发 WebSocket 请求数。
我不明白为什么......我已经阅读了很多关于 socket.io 的教程、指南等(并且我已经在本地使用它构建了 4 个月,没有任何问题)。
这是我的连接代码。
io.sockets.on('connection', function (socket) {
var handshake = socket.handshake;
var session = socket.handshake.session;
clients.push(socket);
console.log('A socket with sessionID ' + handshake.sessionID + ' connected!');
// setup an inteval that will keep our session fresh
var intervalID = setInterval(function () {
session.reload( function () {
session.touch().save();
});
}, 60 * 1000);
socket.on('disconnect', function () {
console.log('A socket with sessionID ' + handshake.sessionID + ' disconnected!');
var i = clients.indexOf(socket);
clients.splice(i, 1);
// clear the socket interval to stop refreshing the session
clearInterval(intervalID);
});
}
控制台会记录人们连接和断开连接的时间...这工作得很好。
如果我重置服务器,我的代码将运行一段时间。我知道 Azure 支持 350 个并发套接字...不知道单个用户如何填充它。
我有 .NET 背景,所以我习惯在使用完连接后关闭连接,但这对于 Node.js 套接字来说似乎没有必要。
但是如果我不需要显式关闭套接字,那么为什么我的连接会堆积起来?
感谢您的帮助,
大卫
更新
因此,根据下面的答案,我发现 azure 对免费计划的并发连接限制相当严格。我更新到标准包以获得完整的 350 个连接。
值得注意的是,我了解到如果您使用此命令: io.sockets.manager.server.connections
您将获得当前连接的计数。这清楚地表明,即使我自己也在使用 7(这就是免费计划失败的原因)。现在我只需要弄清楚为什么......
最佳答案
博客post状态:
•免费:每个网站实例 (5) 个并发连接 •共享:每个网站实例 (35) 个并发连接 •标准:每个网站实例 (350) 个并发连接
350 个并发连接限制仅适用于“标准”Windows Azure 网站。您实际上使用的是标准版吗?
关于Node.js - Azure - Socket.io - 为什么我用完了并发套接字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22331837/