问题连接到socket.io azure webapp

时间:2016-05-13 10:52:56

标签: node.js azure socket.io socket.io-java-client

我已经在azure上部署了socket.io v0.9.17 node js app(我已经在本地测试了两个客户端并且工作正常),代码如下:

var current_page_URL = location.href;
console.log(current_page_URL);
var home_page_URL = http://localhost/site/public/;
if(current_page_URL == home_page_URL){
    console.log("yes");
}else{
    console.log("no");
}

我尝试通过带有:

的socket.io-java-client连接到它
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) { ... }

这给了我客户端的错误:

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

登录服务器:

Error while handshaking... Operation timed out

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

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

编辑:尝试从传输websocket更改为xhr-polling。这并没有给我HTTP 503.13错误并建立与服务器的连接,但它运行不佳。

2 个答案:

答案 0 :(得分:3)

众所周知,您需要在Azure门户的Web sockets标签中启用Application settings选项,或者如果您需要,可以配置web.config文件以添加内容<webSocket enabled="true" />使用websocket功能。

作为参考,请参阅下文。

图1.在Azure门户上启用Web sockets enter image description here

请参阅维基页面Using a custom web.config for Node apps,默认禁用websocket功能。

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

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

enter image description here enter image description here

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

希望它有所帮助。如有任何疑虑,请随时告诉我。

答案 1 :(得分:0)

Azure始终将端口映射到端口80/443以用于Node.JS应用程序。

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

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

我不知道您正在运行什么样的托管计划,但是当您拥有免费套餐时,连接非常有限(5?)。

您可能正在运行此错误,超时后TCP连接未关闭:Node.js - Socket.io - Issue with "maximum concurrent connections"