我已经在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错误并建立与服务器的连接,但它运行不佳。
答案 0 :(得分:3)
众所周知,您需要在Azure门户的Web sockets
标签中启用Application settings
选项,或者如果您需要,可以配置web.config
文件以添加内容<webSocket enabled="true" />
使用websocket功能。
作为参考,请参阅下文。
请参阅维基页面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。
所以我认为第一步是确保启用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"