Node.js - Azure - Socket.io - 为什么我用完了并发套接字?

标签 node.js azure

好的,我有一个在本地运行良好的应用程序。前几天我将其部署到 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/

相关文章:

Node.js:在 MongoDb 中使用 Promises

javascript - 如何使用 Node 找出大型 JSON 文件的结构?

javascript - 引用错误: DocumentReader is not defined NODE JS

c# - Azure 共享访问签名 - 签名不匹配

azure - 使用 Azure B2C 保护 BLOB 存储中的 Assets

azure - 如何在不使用帐户 key 的情况下访问存储帐户 blob 容器?

node.js - 将同一项目中的 Angular 前端和 NodeJS 后端部署到(Linux)Azure 应用程序服务

node.js - 与 socket.io 的私有(private)聊天

azure - 如何将Azure App Service应用程序设置加载到VUE中?

c# - 连接到 Azure 文件存储上的 SQLite 数据库