使用XMPP或WebSocket,为什么用户之间需要实时通信服务器?

时间:2012-08-16 19:22:51

标签: xmpp websocket chat real-time

在底部,它是关于套接字通信的全部内容。如果有一些方法来获取两个用户的IP,为什么不能在用户之间直接建立连接而不必通过中间的服务器?

5 个答案:

答案 0 :(得分:22)

我的2美分:

没有人强迫我们拥有基于服务器的实时通信模型。事实上,XMPP有一个名为"Serverless Messaging"的扩展,它定义了如何使用端点发现的零配置网络原理和XML流的语法以及用于实时通信的XMPP消息传递在本地或广域网上进行通信。此方法使用基于DNS的服务发现和多播DNS来发现支持该协议的实体,包括其IP地址和首选端口。

P2P聊天应用已经有十多年了。将服务器放在中间纯粹是一个决定,取决于您的应用程序需求。如果您的应用程序可以在用户在线/离线状态之间转换时丢失聊天记录,那么您可以很好地拥有直接的P2P模型。同样,在选择基于服务器的消息传递模型时,有一些优势(联系人列表管理,头像,实体发现,在线状态授权,离线消息......)。如果你试图在基于P2P的客户端内完成所有这些工作,那么他们可能会因为他们需要自己完成的所有工作而死亡或表现不佳。

“WebSockets”不是为P2P /无服务器通信而设计的,而是旨在通过无状态HTTP协议提供标准化的PUSH语义。简而言之,“WebSockets”是一种标准化的方式,可替代hacky comet,长轮询,chunked-encoding,jsonp,iframe以及各种其他技术开发人员用来模拟服务器推送HTTP。

答案 1 :(得分:3)

命名的WebSockets(如果有一天它得到了全面和广泛​​的支持)可能是解决方案。

http://namedwebsockets.github.io/spec/

  

命名WebSockets在各种协作本地设备中非常有用   和本地网络场景:发现匹配的对等服务   本地设备和/或本地网络

答案 2 :(得分:0)

在对等(P2P)网络中,用户之间可以进行直接通信。在P2P中,每个参与者都可以充当客户端和服务器。但对于P2P网络,您需要编写一个单独的程序以使通信成为可能。

Web套接字允许您将现有的常见浏览器用作客户端。所有这些都取决于您的应用程序的目的以及您希望如何部署它。

答案 3 :(得分:0)

WebSockets不允许套接字侦听连接,只允许作为客户端连接到服务器(而不是反向)。从技术上讲,他们可以允许这样做,但据我所知,规范目前(也不是预期)允许WebSockets的监听功能。

新的WebRTC(http://www.webrtc.org/)规范看起来可能支持点对点连接。我根本没玩过WebRTC,所以我无法评论它。我认为它会比WebSocket更复杂。也许更了解WebRTC的人可以加入。(除了Chrome的最新版本,我还不确定其他任何浏览器是否真的支持WebRTC)。

答案 4 :(得分:0)

  

如果有某种方法可以获得两个用户的IP

你在问题​​中找到了答案。

我使用的大多数计算机的IP地址都是192.168.0.10(或来自192.168.私有网络的类似地址),并且深入,深入几层NAT。随着免费IPv4地址池和IPv6的终结,这是大多数用户的现实。拥有已知的可路由的地址的稳定中介有助于解决这个问题。