Xmpp Vs Websocket [fechado]

88

Estou prestes a desenvolver um site que tem bate-papo quase em tempo real. Eu sei que ele pode ser implementado usando protocolos xmpp ou websocket. Sei também que o protocolo xmpp foi desenvolvido em 1999, e acho que deve estar maduro hoje em dia. Por outro lado, o protocolo websocket foi desenvolvido em 2011.

  1. Qual era a necessidade do websocket se o xmpp era bom para lidar com conversas em tempo real?
  2. Quais são as principais diferenças entre os 2 protocolos?
  3. E quando devo escolher um deles em vez do outro?
Khafaga
fonte
1
Recentemente me deparei com o mesmo problema, minha resposta foi ir para o WebSockets. Node.JS está se tornando uma linguagem extremamente popular e, por direito, deveria ser. O XMPP está ok - no entanto, em minha opinião, você está se limitando a seguir em frente ao decidir usar essa tecnologia mais antiga. O Node é, entretanto, uma fera complicada e você deve abordá-lo de forma diferente de como faria com o JavaScript. Se você for paciente, eu sugeriria ir ao Node - não apenas por isso, mas permitirá que você se expanda em outras áreas com mais facilidade.
JustSteveKing
7
XMPP é um protocolo de mensagens e presença extensível, Websocket é um protocolo que fornece comunicações full duplex na porta 80. Você compara maçãs a laranjas.
Fluxo
16
@Flow: na sua opinião, posso estar comparando maçãs com laranjas. Mas o que estou perguntando é qual devo escolher ao desenvolver um site que forneça um recurso de chat em tempo real.
Khafaga,
1
@JustSteveKing A maioria das coisas já foram feitas no XMPP, mas você precisa gerenciar essas coisas no node.js. Isso equivale a reinventar a roda novamente.
Shahid Karimi

Respostas:

133

A resposta curta é 'ambos'.

O XMPP é um conjunto de protocolo de aplicativo para fazer bate-papo em tempo real (e muitas outras coisas, por falar nisso) - ele precisa ser transportado pela rede de alguma forma, então você precisa de uma ligação de transporte. Existem três ligações de transporte principais para XMPP -

  1. TCP / IP, que é o que geralmente se usa na Internet com clientes nativos em dispositivos
  2. HTTP (chamado BOSH), que é o que tradicionalmente se usa ao usar XMPP no navegador (já que o TCP-IP não está disponível para aplicativos Javascript no navegador)
  3. Websockets, que é usado ao fazer XMPP em um navegador moderno.

Portanto, se estiver desenvolvendo um aplicativo de chat em um navegador, você escolherá XMPP como o protocolo do aplicativo e usará websockets (em um navegador moderno) ou BOSH (em um navegador mais antigo) como o transporte de rede. Se você usar uma biblioteca XMPP para Javascript como Stanza.io ( https://github.com/otalk/stanza.io ), ela suportará ambos e você só estará pensando em 'XMPP' em vez da camada de transporte, diferente da configuração, quando você precisa dizer a qual ponto de extremidade conectar.

(Você não pode usar 'apenas websockets' para bate-papo - você pode usar websockets sem XMPP, mas o que isso realmente significa é que você está inventando seu próprio protocolo de camada de aplicativo para bate-papo, e provavelmente você vai economizar muito tempo e dores de cabeça, aproveitando o trabalho que já foi feito para escrever um com propriedades úteis (segurança, identidade, extensibilidade etc.) e para o qual existem bibliotecas e servidores, optando pelo XMPP.)

Kev
fonte
1
Oi, desculpe, as perguntas já fazem um tempo, estou apenas pensando, isso significa que transportar vinculação é como socket.io/strophe.js, e xmpp é como (openfire / Ejabbered)?
João de
1
Não, o que você está nomeando lá são bibliotecas versus servidores.
Kev
Saiba mais sobre camadas (incluindo transporte, camadas de aplicativo): en.wikipedia.org/wiki/OSI_model
Karina Klinkevičiūtė
2
boa resposta de Kev, mas pode valer a pena apontar 1> TCP pertence à camada 4 - camada de transporte, enquanto HTTP e Websocket pertencem à camada 7 - camada de aplicação.
Gob00
Na verdade, @ Gob00st - também estou confuso aqui. Esta resposta de Kev diz "ambos" porque "você usaria websockets (em um navegador moderno) ... como o transporte de rede " . Mas como podemos reconciliar isso com o fato de que WebSocket (como XMPP e HTTP) são, na verdade, protocolos de aplicativo ( não de transporte), ou seja, a camada 7 OSI? Por que o XMPP iria "por cima" dos WebSockets em um navegador moderno?
Amelio Vazquez-Reina