2

我在 azure 上部署了一个 socket.io v0.9.17 节点 js 应用程序(我已经在本地使用两个客户端进行了测试,它工作正常),代码如下:

var util = require("util");
var port = process.env.PORT || 1337;
var app = require("http").createServer(function (req, res) {
    res.writeHead(200, { "Content-Type": "text/plain" });
    res.end("Socket.io application");
}).listen(port);

var io = require('socket.io').listen(app);

io.configure(function () {
    io.set("transports", ["websocket"]);
});

io.sockets.on('connection', function (client) { ... }

我尝试通过 socket.io-java-client 连接到它:

// Have tested with different ports
socket.connect("http://myapp.azurewebsites.net:1337/", this);

这给了我客户端错误:

Error while handshaking... Operation timed out

服务器上的日志:

debug: websocket writing 1::
debug: setting request GET /socket.io/1/websocket/SFePun_Ug5ycS5EVIrSO
debug: set heartbeat interval for client SFePun_Ug5ycS5EVIrSO
debug: discarding transport
debug: cleared heartbeat interval for client SFePun_Ug5ycS5EVIrSO
debug: setting request GET /socket.io/1/websocket/SFePun_Ug5ycS5EVIrSO
debug: set heartbeat interval for client SFePun_Ug5ycS5EVIrSO
debug: discarding transport
debug: cleared heartbeat interval for client SFePun_Ug5ycS5EVIrSO
debug: setting request GET /socket.io/1/websocket/SFePun_Ug5ycS5EVIrSO
debug: set heartbeat interval for client SFePun_Ug5ycS5EVIrSO
debug: discarding transport
(repeated a couple of times)
...
IIS Detailed Error - 503.13 - Number of active WebSocket requests has reached the maximum concurrent WebSocket requests allowed.

socket.connect("http://myapp.azurewebsites.net/", this);

如果我连接一个客户端,这不应该发生。

任何想法如何解决这一问题?

编辑:试图从传输 websocket 更改为 xhr-polling。这不会给我 HTTP 503.13 错误并建立与服务器的连接,但效果不佳。

4

2 回答 2

2

据我所知,如果要使用 websocket 功能,则需要启用Azure 门户Web sockets选项卡中的选项或配置文件以添加内容。Application settingsweb.config<webSocket enabled="true" />

作为参考,请参见下文。

图 1. 启用Web socketson Azure 门户 在此处输入图像描述

参考 wiki 页面Using a custom web.config for Node apps,默认禁用 websocket 功能。

正如@ArneRie 所说,Azure webapps 只监听端口 80 和 443,请参阅https://github.com/projectkudu/kudu/wiki/Azure-Web-App-sandbox#network-endpoint-listening

对于不同层的每个应用服务实例的 websocket 限制,请参阅https://azure.microsoft.com/en-us/documentation/articles/azure-subscription-service-limits/#app-service-limits

在此处输入图像描述 在此处输入图像描述

所以我认为第一步是确保启用 websocket 功能,然后尝试通过 socket.io-java-client 建立与 http 协议和端口 80 的 websocket 连接。

希望能帮助到你。任何问题,请随时告诉我。

于 2016-05-16T08:18:04.630 回答
1

Azure 始终映射到您的 Node.JS 应用程序的端口 80/443。

var port = process.env.PORT || 1337;

您的应用程序正在使用这段代码侦听端口 80/443。

我不知道您正在运行哪种托管计划,但是当您拥有免费层时,连接非常有限(5 个?)。

可能是您在此错误中运行,超时后 TCP 连接未关闭:Node.js - Socket.io - “最大并发连接数”问题

于 2016-05-13T12:44:02.157 回答