Long polling від а до я своїми руками, savepearlharbor

Компіляція Nginx модуля під linux

Для підтримки long polling підключень в сервері Nginx, реалізований чудовий модуль nginx-push-stream-module. Так як він не входить в офіційну поставку, його потрібно завантажити, налаштувати і скомпілювати разом з Nginx.

Перед цим у вас повинні бути встановлені всі необхідні пакети

Далі потрібно завантажити сам модуль nginx-push-stream-module, nginx і скомпілювати їх разом.

Клонуємо проект з GIT

Завантажуємо і розпаковуємо останній nginx

Налаштовуємо і компілюємо nginx разом з nginx-push-stream-module

Якщо немає помилок компіляції, все готово. Перевіримо, що ми встановили саме той nginx і те, що тепер в ньому дійсно є модуль nginx-push-stream-module

Після виконання цих команд, ви повинні побачити таке:

Установка, а потім Nginx для Long Polling підключень

Опускаючи настройку інших параметрів сервера, конфігураційний файл /usr/local/nginx/nginx.conf повинен виглядати так:

Приклад для розуміння роботи:
Можна створити кілька передплатників, викликавши: stream.example.com/sub/1. stream.example.com/sub/2. stream.example.com/sub/3. Кожен з них буде «висіти» на Nginx сервері протягом 25 секунд (push_stream_longpolling_connection_ttl). Якщо ми викличемо POST запит на stream.example.com/pub?id=2 і передамо в тілі повідомлення «Hello», то передплатник «висить» на / sub / 2, отримає відповідь «Hello». Зручно перевіряти це в плагіні Poster для FireFox.

Я пробував різні методи, але за еталон вибрав CORS (Cross-origin resource sharing). У порівнянні з іншими методами має такі переваги:

  • Відмінно працює у віх браузерах Chrome, FireFox, Opera, IE 8, 9, 10
  • У браузерах не варто іконка завантаження сторінки
  • Працює на різних доменах (кроссдоменно)

Нехай $ - jQuery, а в змінної subID - унікальне значення для передплатника

Важливо сказати про двох параметрах etag і time.

Без них long polling працював далеко не завжди і повідомлення приходили через раз. Ці два параметри, потрібні модулю nginx-push-stream-module, для ідентифікації повідомлень, які ще не отримав передплатник. Так що для стабільної роботи це просто необхідно.

В ув'язненні