首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >连接到socket.io azure webapp时出现问题

连接到socket.io azure webapp时出现问题
EN

Stack Overflow用户
提问于 2016-05-13 18:52:56
回答 2查看 2.1K关注 0票数 2

我已经在azure上部署了一个socket.io v0.9.17 node js应用程序(我已经用两个客户端在本地测试过了,它工作得很好),代码如下:

代码语言:javascript
复制
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连接到它:

代码语言:javascript
复制
// Have tested with different ports
socket.connect("http://myapp.azurewebsites.net:1337/", this);

这在客户机上给了我错误:

代码语言:javascript
复制
Error while handshaking... Operation timed out

服务器上的日志:

代码语言:javascript
复制
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错误,并建立到服务器的连接,但它的效果很差。

EN

回答 2

Stack Overflow用户

发布于 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连接。

希望能有所帮助。如有任何问题,请随时与我联系。

票数 2
EN

Stack Overflow用户

发布于 2016-05-13 20:44:02

Azure总是为你的Node.JS应用程序映射到80/443端口。

代码语言:javascript
复制
var port = process.env.PORT || 1337;

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

我不知道你在运行什么样的托管计划,但当你有了免费的层,连接是非常有限的(5?)。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37208166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档