Xmpp проти Websocket [закрито]


88

Я збираюся розробити веб-сайт, який має майже чат у режимі реального часу. Я знаю, що це може бути реалізовано за допомогою протоколів xmpp або websocket. Я також знаю, що протокол xmpp був розроблений в 1999 році, і я думаю, що він повинен бути дозрілим сьогодні. З іншого боку, протокол websocket був розроблений в 2011 році.

  1. Що було потрібно для websocket, якщо xmpp добре обробляв розмови в режимі реального часу?
  2. Які основні відмінності між 2 протоколами?
  3. І коли мені слід вибрати один з них над іншим?

1
Нещодавно я натрапив на те саме питання, моя відповідь полягала в тому, щоб піти на WebSockets. Node.JS стає надзвичайно популярною мовою, і за правами вона повинна бути. XMPP - це нормально, однак, на мою думку, ви обмежуєтесь рухатись вперед, вирішивши вибрати цю стару технологію. Однак Node - хитрий звір, і ви повинні підходити до нього інакше, як до JavaScript. Якщо ви досить терплячі, я б запропонував перейти на Node - не тільки для цього, але це дозволить вам розширюватися в інших областях з більшою легкістю.
JustSteveKing

7
XMPP - це розширюваний протокол обміну повідомленнями та присутності, Websocket - це протокол, який забезпечує повний дуплексний зв’язок через порт 80. Ви порівнюєте яблука з апельсинами.
Потік

16
@Flow: Я, на вашу думку, можу порівнювати яблука з апельсинами. Але я запитую, що я повинен вибрати при розробці веб-сайту, який надає можливість спілкування в режимі реального часу.
Хафага,

1
@JustSteveKing Більшість речей вже зроблено в XMPP, однак вам доведеться керувати цими речами в node.js. Це дорівнює повторному винаходу колеса.
Шахід Карімі

Відповіді:


133

Коротка відповідь - "обидва".

XMPP - це набір прикладних протоколів для спілкування в режимі реального часу в чаті (і багато іншого, з цього приводу) - його тоді потрібно якось транспортувати по мережі, тому вам потрібна транспортна прив'язка. Є три основні транспортні прив'язки для XMPP -

  1. TCP / IP, яким зазвичай користуються в Інтернеті разом із власними клієнтами на пристроях
  2. HTTP (званий BOSH), що традиційно використовується при використанні XMPP у браузері (оскільки TCP-IP недоступний для програм Javascript у браузері)
  3. Websockets, який використовується для створення XMPP у сучасному браузері.

Отже, якщо ви розробляєте програму чату в браузері, ви вибрали XMPP як протокол програми, а ви використовували веб-сокети (у сучасному браузері) або BOSH (у старішому браузері) як мережевий транспорт. Якщо ви використовуєте бібліотеку XMPP для Javascript, як Stanza.io ( https://github.com/otalk/stanza.io ), вона підтримуватиме обидва, і ви просто будете думати про "XMPP", а не про транспортний рівень, крім налаштування, коли вам потрібно сказати, до якої кінцевої точки підключатися.

(Ви не можете використовувати "просто веб-сокети" для чату - ви можете використовувати веб-сокети без XMPP, але це насправді означає, що ви винаходите власний протокол рівня додатку для чату, і шанси зберегти багато часу та головних болів, скориставшись роботою, яка вже пішла для написання роботи з корисними властивостями (безпека, ідентичність, розширюваність тощо) і для якої існують існуючі бібліотеки та сервери, замість цього перейшовши на XMPP.)


1
Привіт, вибачте, запитань було досить давно, мені просто цікаво, так це означає, що транспортування прив'язки схоже на socket.io/strophe.js, а xmpp схоже (openfire / Ejabbered)?
Джон

1
Ні, те, що ви називаєте, - це бібліотеки проти серверів.
Кев

Ось докладніше про шари (включаючи транспорт, шари додатків): en.wikipedia.org/wiki/OSI_model
Карина Клінкевічюте,

2
хороша відповідь від Kev, але, можливо, варто зазначити 1> TCP належить шару 4 - транспортному шару, тоді як HTTP і Websocket належать шару 7 - шару програми.
Gob00st

Дійсно @ Gob00st - я також тут розгублений. Ця відповідь від Kev говорить "обидва", тому що "ви б використовували веб-сокети (у сучасному браузері) ... як мережевий транспорт " . Але як нам узгодити це з тим фактом, що WebSocket (як XMPP і HTTP) насправді є прикладнимине транспортними) протоколами, тобто 7-м рівнем OSI? Чому XMPP буде "поверх" WebSockets у сучасному браузері?
Амеліо Васкес-Рейна
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.