在底层,一切都与套接字通信有关。如果有办法获取两个用户的IP地址,为什么不能直接在用户之间建立连接,而不必通过中间服务器呢?
我的看法:
没有人强制我们采用基于服务器的实时通信模型。事实上,XMPP有一个称为"Serverless Messaging"的扩展,它定义了如何使用零配置网络原则进行端点发现和XML流和XMPP消息的语法进行本地或广域网通信。该方法使用基于DNS的服务发现和多播DNS来发现支持协议的实体,包括它们的IP地址和首选端口。
P2P聊天应用程序已经有十多年了。在中间放置服务器纯粹是取决于您的应用程序需求的决定。如果您的应用程序可以容忍用户在在线/离线状态之间转换时丢失聊天记录,那么您完全可以采用直接的P2P模型。同样,当选择基于服务器的消息传递模型时,存在许多优点(联系人列表管理、头像、实体发现、出席授权、离线消息等)。如果您试图在基于P2P的客户端内部完成所有这些工作,它们可能会死亡或表现不佳,因为它们需要自己执行所有这些工作。
"WebSockets"并非为P2P/无服务器通信而设计,而是旨在通过无状态HTTP协议提供标准化的PUSH语义。简而言之,“WebSockets”是一种标准化的方法,用于替代开发人员一直在使用的hacky comet、长轮询、分块编码、jsonp、基于iframe的和其他各种技术来模拟HTTP上的服务器推送。如果有一天,命名的WebSockets(如果得到充分和广泛支持)可能是解决方案。
http://namedwebsockets.github.io/spec/
在各种协作本地设备和本地网络场景中,命名的WebSockets非常有用:发现本地设备和/或本地网络上匹配的对等服务。
WebSockets不允许套接字监听连接,只能作为客户端连接到服务器(不能反向)。从技术上讲,它们可以使其允许此功能,但据我所知,规范目前(也不会)允许WebSocket进行监听功能。
新的WebRTC(http://www.webrtc.org/)规范似乎支持点对点连接。我还没有使用过WebRTC,因此无法发表评论。我认为这可能比WebSocket更复杂。也许了解WebRTC更多的人可以发表意见。(除了最新版本的Chrome之外,我不确定其他浏览器是否真正支持WebRTC)。
192.168.0.10
(或类似于192.168.
私有网络),并且深深地隐藏在几层NAT之后。随着免费IPv4地址池的结束和IPv6仍然没有出现在视野中,这是大多数用户生活的现实。拥有一个已知的、可路由的稳定中介地址,在解决这个问题时非常有帮助。