Длительный опрос работает, но не обязательно является лучшим вариантом. Это становится действительно неприятным с точки зрения интеграции с брандмауэрами и ненадежным интернет-соединением. Например, на работе многие брандмауэры наших клиентов отключают любое HTTP-соединение, которое не активно в течение 10-20 секунд.
Мы решили множество проблем, перейдя на WebSocket через SSL. WebSocket дает вам полнодуплексный канал, который идеально подходит для проталкивания на сервер. Используя SSL, брандмауэры часто менее агрессивны в сборе мусора и прозрачные прокси часто обманываются шифрованием TLS. Вам все равно придется управлять случайным отключением на уровне приложения, даже если вы используете WebSockets вместо длительного опроса, но даже это можно изящно обработать, имея достойный протокол восстановления, независимо от того, какой транспортный протокол вы используете.
При этом вместо непосредственного использования WebSockets мы решили использовать SockJS. Основная причина такого выбора заключалась в том, что SockJS может использовать WebSockets, когда они доступны (rfc6455, hixie-76, hybi-10), но также может использовать xhr-streaming, xdr-streaming, etc, если браузер клиента не поддерживает это (или при сбое подключения). Когда я говорю, что он может «откатиться», я имею в виду, что код, который вы используете на стороне клиента, остается точно таким же, SockJS берет на себя всю грязную работу.
На стороне сервера то же самое. В настоящее время мы используем Cyclone реализация SockJS для Twisted (в производстве), но нам также известно о DesertBus', которую нам еще предстоит проверить. Есть также некоторые другие вещи, которые мы надеемся проверить, например, WAMP и сопутствующий Autobahn|Python.
Что касается производительности, мы используем HAProxy для терминации SSL и балансировки нагрузки. HAProxy поразительно эффективен на многих уровнях.
person
teotwaki
schedule
08.02.2014