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