Проблема с подключением к веб-приложению socket.io azure

У меня есть приложение js для socket.io v0.9.17, развернутое на Azure (которое я тестировал локально с двумя клиентами и оно работает нормально) со следующим кодом:

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);

Что не должно случиться, если я подключу одного клиента.

Любые идеи, как это исправить?

РЕДАКТИРОВАТЬ: Попытка перейти от транспортного веб-сокета на xhr-опрос. Это не дает мне ошибку HTTP 503.13 и устанавливает соединение с сервером, но работает плохо.

2 ответа

Как я знаю, вам нужно включить Web sockets параметры на вкладке Application settings на портале Azure или настройте web.config файл для добавления контента <webSocket enabled="true" /> если вы хотите использовать функцию веб-сокета.

В качестве ссылки, пожалуйста, смотрите ниже.

Рисунок 1. Включите Web sockets на портале Azure

Ссылаясь на вики-страницу Используя пользовательский web.config для приложений Node, функция веб-сокета по умолчанию отключена.

Как сказал @ArneRie, веб-приложения Azure прослушивают только порты 80 и 443, см. https://github.com/projectkudu/kudu/wiki/Azure-Web-App-sandbox.

Информацию о лимитах веб-сокетов на экземпляр службы приложения для другого уровня см. На https://azure.microsoft.com/en-us/documentation/articles/azure-subscription-service-limits/.

Поэтому я думаю, что первым шагом является то, что убедитесь, что функция websocket включена, а затем попытайтесь установить соединение websocket с протоколом http и портом 80 через socket.io-java-client.

Надеюсь, поможет. Любая проблема, пожалуйста, не стесняйтесь, дайте мне знать.

Azure всегда отображает порт 80/443 для ваших приложений Node.JS.

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

Ваше приложение прослушивает порт 80/443 с этим фрагментом кода.

Я не знаю, на каком хостинг-плане вы работаете, но когда у вас есть уровень Free, соединения очень ограничены (5?).

Возможно, вы работаете с этой ошибкой, когда TCP-соединения не закрываются после истечения времени ожидания: Node.js - Socket.io - проблема с "максимальным количеством одновременных соединений"

Другие вопросы по тегам