none
Windows Azure: Node js + WebSockets RRS feed

  • Вопрос

  • Здравствуйте!

    Был разработан простой чат под node js с использованием socket i/o.
    Socket I/O позволяет задать список транспортных методов для работы сокетов в определенном порядке. Это позволяет приложению попытаться реализовать работу сокетов разным способом, если вдруг один из транспортов не поддерживается сервером.

    На девел. сервере (nginx + nodejs под ubuntu) все завелось с первого раза. Сразу чистый ws://.
    картинка - http://tinypic.com/r/2wmgklu/5

    При выгрузке приложения на платформу Windows Azure возникла следующая ситуция:
    Чат тупит несколько секунд (попытка "поздороваться" через ws://), потом получает атлуп от сервера (картинка - http://i42.tinypic.com/25qf5fb.png)

    и "деградирует" до классического лонг-поллинга. (картинка - http://i40.tinypic.com/30jrb55.png)

    Приложение работает, однако есть огромное желание разобраться, что не так.
    В интернете не очень много информации на данный счет и она крайне противоречива.
    Все упирается в тонкую настройку IIS через web.config, с чем у меня совсем мало опыта.

    Итого два вопроса: 

    1. Поддерживает ли платформа Windows Azure транспортный метод webscoket (ws://)
    2. Если поддерживает: прошу поделиться опытом тонкой настройки IIS под nodejs-приложение с использованием websocket. В идеале: правильно настроенный web.config. Буду рад любой информации


    24 января 2014 г. 15:12

Ответы

  • Решение найдено.
    Необходимо разместить web.config со следующим содержимым:

    <configuration>
        <system.webServer>
    
            <!-- indicates that the app.js is a node.js application
            to be handled by the iisnode module -->
    
            <handlers>
                <add name="iisnode" path="app.js" verb="*" modules="iisnode" />
            </handlers>
    
            <!-- redirect all incoming requests to app.js application -->
    
            <rewrite>
                <rules>
                    <rule name="iisnode">
                        <action type="Rewrite" url="app.js"/>
                    </rule>
                </rules>
            </rewrite>
    
            <!-- disable the IIS WebSocket module to allow Node.js to provide its own
            WebSocket implementation based on socket.io -->
    
            <webSocket enabled="false" />
    
        </system.webServer>
    </configuration>
    

    • Помечено в качестве ответа epic414 29 января 2014 г. 13:15
    29 января 2014 г. 13:14

Все ответы

  • А почему вы выбрали машину на windows, а не на Linux?

    Вообще, Windows Azure - это не что-то такое единое и неделимое, поэтому неправильно говорить не "поддерживает ли платформа...", а "поддерживает такая-то виртуальная машина или сервис" вот такую штуку.

    Я web-сокеты тестировал на Web Site + SignalR , но могу предложить  вот эту ссылку

    24 января 2014 г. 16:50
  • Решение найдено.
    Необходимо разместить web.config со следующим содержимым:

    <configuration>
        <system.webServer>
    
            <!-- indicates that the app.js is a node.js application
            to be handled by the iisnode module -->
    
            <handlers>
                <add name="iisnode" path="app.js" verb="*" modules="iisnode" />
            </handlers>
    
            <!-- redirect all incoming requests to app.js application -->
    
            <rewrite>
                <rules>
                    <rule name="iisnode">
                        <action type="Rewrite" url="app.js"/>
                    </rule>
                </rules>
            </rewrite>
    
            <!-- disable the IIS WebSocket module to allow Node.js to provide its own
            WebSocket implementation based on socket.io -->
    
            <webSocket enabled="false" />
    
        </system.webServer>
    </configuration>
    

    • Помечено в качестве ответа epic414 29 января 2014 г. 13:15
    29 января 2014 г. 13:14