WebSockets - це безумовно майбутнє.
Довге опитування - це брудне рішення, щоб запобігти створенню з'єднань для кожного запиту, як AJAX - але довге опитування було створено, коли WebSockets не існувало. Зараз через WebSockets триває довге опитування.
WebRTC дозволяє здійснювати одноранговий зв’язок.
Я рекомендую вивчити WebSockets .
Порівняння:
різних технік спілкування в Інтернеті
AJAX - request
→ response
. Створює з'єднання з сервером, надсилає заголовки запитів із необов'язковими даними, отримує відповідь від сервера та закриває з'єднання.
Підтримується у всіх основних браузерах.
Довге опитування - request
→ wait
→ response
. Створює підключення до сервера, як AJAX, але підтримує постійне з'єднання відкритим на деякий час (хоча недовго). Під час з'єднання відкритий клієнт може отримувати дані з сервера. Клієнту доводиться періодично підключатися після закриття з'єднання через тайм-аути або дані eof. На стороні сервера вона все ще трактується як запит HTTP, такий же як AJAX, за винятком того, що відповідь на запит відбудеться зараз або через деякий час у майбутньому, визначений логікою програми.
діаграма підтримки (повна) | Вікіпедія
WebSockets - client
↔ server
. Створіть TCP-з'єднання з сервером і тримайте його відкритим, наскільки це потрібно. Сервер або клієнт можуть легко закрити з'єднання. Клієнт проходить процедуру рукостискання, сумісного з HTTP. Якщо це вдасться, то сервер і клієнт можуть обмінюватися даними в обох напрямках у будь-який час. Це ефективно, якщо програма вимагає частого обміну даними обома способами. WebSockets мають обрамлення даних, що включає маскування кожного повідомлення, що надсилається від клієнта до сервера, тому дані просто шифруються.
діаграма підтримки (дуже хороша) | Вікіпедія
WebRTC - peer
↔ peer
. Транспорт для встановлення зв'язку між клієнтами є транспортно-агностичним, тому він може використовувати UDP, TCP або навіть більш абстрактні шари. Зазвичай це використовується для передачі даних з великим обсягом, наприклад, потокової передачі відео / аудіо, де надійність є вторинною і кілька кадрів або зниження прогресу якості можуть бути принесені в жертву на користь часу відгуку і, щонайменше, деякої передачі даних. Обидві сторони (однолітки) можуть передавати дані один одному незалежно. Хоча він може використовуватися абсолютно незалежно від будь-яких централізованих серверів, він все ще потребує певного способу обміну даними кінцевих точок, де в більшості випадків розробники все ще використовують централізовані сервери для "зв’язку" однолітків. Це потрібно лише для обміну необхідними даними для встановлення з'єднання, після чого централізований сервер не потрібен.
діаграма підтримки (середня) | Вікіпедія
Події, надіслані сервером - client
← server
. Клієнт встановлює стійке і довготривале підключення до сервера. Лише сервер може надсилати дані клієнту. Якщо клієнт хоче надіслати дані на сервер, для цього знадобиться використовувати іншу технологію / протокол. Цей протокол сумісний із протоколом HTTP та простий у реалізації в більшості платформ на стороні сервера. Це кращий протокол, який слід використовувати замість тривалого опитування. діаграма підтримки (хороша, крім IE) | Вікіпедія
Переваги:
Основна перевага WebSockets на стороні сервера полягає в тому, що це не запит HTTP (після рукостискання), а належний протокол зв'язку на основі повідомлень. Це дає змогу досягти величезних переваг продуктивності та архітектури . Наприклад, у node.js ви можете поділяти однакову пам’ять для різних підключень сокетів, тому кожен може отримати доступ до спільних змінних. Тому вам не потрібно використовувати базу даних як пункт обміну посередині (наприклад, AJAX або Long Polling з мовою, як PHP). Ви можете зберігати дані в оперативній пам’яті або навіть знову публікувати їх між сокетами.
Міркування щодо безпеки
Люди часто стурбовані безпекою WebSockets. Реальність полягає в тому, що це має незначне значення або навіть ставить WebSockets як кращий варіант. Перш за все, у AJAX більше шансів на MITM , оскільки кожен запит є новим TCP-з'єднанням, яке проходить через Інтернет-інфраструктуру. Після підключення до WebSockets набагато складніше перехоплення між ними, додатково примусового маскування кадру при передачі даних з клієнта на сервер, а також додаткового стиснення, що вимагає більше зусиль для зондування даних. Всі сучасні протоколи підтримують як HTTP, так і HTTPS (зашифровані).
PS
Пам’ятайте, що WebSockets, як правило, дуже відрізняється логікою підключення до мереж , більше схожий на ігри в реальному часі весь цей час, а не як http.