nodejs socket.io с узлом IIS - PullRequest
       43

nodejs socket.io с узлом IIS

1 голос
/ 05 ноября 2011

Я пробовал что-то с node.js в Windows Vista / IIS 7, используя узел iis. Моя идея заключается в том, чтобы использовать серверный скрипт в приложении asp .net mvc для подключения к другому серверу сокетов и постоянного обслуживания запросов.

Я загрузил версию iisnode в https://github.com/tjanczuk/iisnode для IIS 7 и смог запустить базовый канал http-сервера «hello world», используя сопоставления обработчиков http в конфигурации web.config и IIS.

Я пытаюсь использовать библиотеку socket.io из node.js. Это работает независимо, если я пишу сервер и клиент. Но происходит сбой при использовании с узлом IIS.

У меня проблемы с дальнейшим снижением. Такие проблемы, как

  • Как включить модули npm в проект asp .net mvc? Я старался положить node_modules в папку сценариев узла, но это сделало нет помощи. В основном команда require ('socket.io') работает, но подключение сокета и т. д., просто не удается.
  • Как иметь сокет подключение от клиента, который будет продолжать прослушивать обновления от сервер (как COMET) - как я уже сказал, я пытаюсь использовать socket.io

Кто-нибудь пробовал это раньше?

Ответы [ 3 ]

1 голос
/ 05 марта 2012

Чтение назад Несколько месяцев назад , поддержка WebSocket не поддерживается с Socket.IO под IIS, однако длительный опрос.

Это было несколько месяцев назад, и сейчас я сталкиваюсь с той же проблемой и пытаюсь ее решить.

Как Томаш пишет:

Обратите внимание, что iisnode не поддерживает транспорт веб-сокетов, но использование socket.io все еще возможно с другими транспортными средствами на основе HTTP например, длинный опрос HTTP:

io.configure(function() {
    io.set('transports', ['xhr-polling']);
});

Похоже, , по состоянию на 23 февраля 2012 г., эта функциональность все еще не поддерживается.

Вам нужно пройти через IIS? Есть ли у вас возможность использовать чистый Socket.IO/Node, исключая IISNode? Если вам нужна полная поддержка WebSocket с возможностью отката, это выглядит как единственный вариант, если нет других предложений?

0 голосов
/ 07 февраля 2013

Если ваше веб-приложение socket.io размещено в виртуальном каталоге IIS, конфигурация socket.io должна быть изменена по сравнению с самостоятельным вариантом.Пожалуйста, смотрите http://tomasz.janczuk.org/2013/01/hosting-socketio-websocket-apps-in-iis.html для деталей.

Также, начиная с версии 0.2.x, iisnode поддерживает WebSockets в Windows 8 и Windows Server 2012 с IIS 8. Дополнительные сведения см. В http://tomasz.janczuk.org/2012/11/how-to-use-websockets-with-nodejs-apps.html.

0 голосов
/ 06 ноября 2011

Это может или не может быть связано с вашей проблемой.Я не очень много сделал с socket.io, но планировал сделать что-то очень похожее на то, что вы описываете.При чтении исходного кода для iisnode я обнаружил следующий код в cnodehttpmodule.cpp:

this->applicationManager->GetEventProvider()->Log(L"iisnode received a new http request", WINEVENT_LEVEL_INFO);

// reject websocket connections since iisnode does not support them
// http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-17#page-17

PCSTR upgrade = pHttpContext->GetRequest()->GetHeader(HttpHeaderUpgrade, NULL);
ErrorIf(upgrade && 0 == strcmp("websocket", upgrade), ERROR_NOT_SUPPORTED); 

Мне кажется, что если в заголовок запроса включен «websocket», он будет отклонен,Мне нужно прочитать протокол веб-сокета, чтобы лучше понять, что именно это означает.

Я буду первым, кто признает, что не слишком хорошо знаю, как веб-сокеты отличаются от длительных запросов.Однако, насколько я понимаю, socket.io будет работать на старых браузерах, которые не поддерживают веб-сокеты.

Я рекомендую вам установить транспорт только на xhr-polling или jsonp-polling.Это своего рода побеждает крутой фактор использования node.js, но может помочь вам решить вашу проблему.

...