2012-08-16 113 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的終結,這是大多數用戶所居住的現實。有一個已知的穩定中介,可路由的地址有助於解決此問題。

相關問題