2012-08-16 77 views

回答

22

我的2美分:

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

P2P聊天应用已经有十多年了。中间有一台服务器完全取决于您的应用程序需求。如果您的应用程序可以在用户在在线/离线状态之间转换时丢失聊天,那么您可以直接使用P2P模式。同样,当涉及到选择基于服务器的消息传递模型时,会有一些负载和优势(联系人列表管理,头像,实体发现,在线状态授权,离线消息等)。如果您试图在基于P2P的客户端内部拥有所有这些功能,那么他们可能会因为他们自己需要执行的所有工作而死亡或执行不足。

“WebSockets”并非针对P2P /无服务器通信而设计的,而是旨在为无状态HTTP协议提供标准化的PUSH语义。简而言之,“WebSockets”是取代hacky comet,long-polling,chunked-encoding,jsonp,iframe和其他技术开发人员用来模拟HTTP上的服务器推送的标准化方法。

+2

优秀的答案。我会补充一点,比较XMPP和websocket就像比较一辆车和一条路。一旦WebSocket规范固化 – Robin 2012-08-17 17:06:34

+0

@Robin这真的取决于XMPP是指RFC 6120还是RFC 6121.XMPP-Core(6120)仅定义了流协议和数据报格式 - 完全像WebSocket协议。在你的比喻中,两者都是道路。它是定义节的格式和含义的XMPP-IM(6121)。甚至有RFC 7395定义了如何通过WebSocket“驱动”XMPP-IM,而不是XMPP-Core。 – smoku 2016-08-25 09:43:42

0

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

Web套接字让您利用现有的常见浏览器作为客户端。全部取决于你的应用程序的目的是什么以及你想要如何部署它。

0

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

新的WebRTC(http://www.webrtc.org/)规范看起来像它可能支持点对点连接。我还没有玩过WebRTC,所以我不能评论它。我认为这会比WebSocket更复杂。也许一个更了解WebRTC的人可以更好地参与进来。(除了最新版本的Chrome,我不确定其他浏览器是否真的支持WebRTC)。

+0

那么设备本身也可能是服务器,不是吗? – tom 2012-08-16 19:56:12

+0

是的(根据我的理解),使用WebRTC,两个用户应该能够相互连接并完全独立于任何其他方(即服务器)进行通信。但正如我所指出的那样,目前浏览器支持受限。有一些演示应用程序在那里使用它,包括使用Jingle的一些视频聊天内容(对XMPP的P2P音频/视频扩展)。 – devlop 2012-08-16 20:06:30

3

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

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

命名的WebSockets是在各种协作本地设备 和本地网络方案中很有用:查询匹配对等服务 本地设备和/或本地网络上

0

如果有一些办法让两个用户

的IP你钉在你的问题正确的答案。

我使用的大多数机器的IP地址为192.168.0.10(或类似于192.168.专用网络),并且深深地落后于几​​层NAT。随着免费的IPv4地址池和IPv6的终结,这是大多数用户所居住的现实。有一个已知的稳定中介,可路由的地址有助于解决此问题。

相关问题