我已经在azure上部署了一个socket.io v0.9.17 node 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错误,并建立到服务器的连接,但它的效果很差。
发布于 2016-05-16 16:18:05
据我所知,如果您想要使用websocket功能,您需要在Azure门户上的选项卡Application settings中启用Web sockets选项,或者配置web.config文件以添加content <webSocket enabled="true" />。
作为参考,请参阅以下内容。
图1.在Azure门户上启用Web sockets

参考维基页面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。
不同层级的每个app服务实例的websockets数量限制请参考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-13 20:44:02
Azure总是为你的Node.JS应用程序映射到80/443端口。
var port = process.env.PORT || 1337;您的应用程序正在使用这段代码监听端口80/443。
我不知道你在运行什么样的托管计划,但当你有了免费的层,连接是非常有限的(5?)。
您可能正在运行此错误,并且TCP连接在超时后未关闭:Node.js - Socket.io - Issue with "maximum concurrent connections"
https://stackoverflow.com/questions/37208166
复制相似问题