Компіляція 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, для ідентифікації повідомлень, які ще не отримав передплатник. Так що для стабільної роботи це просто необхідно.