2013-07-15 82 views
1

我一直在學習Python套接字,http請求/響應這些天處理,我仍然是服務器編程的新手,我有一個關於聊天網站背後的基本思想的問題。聊天網站背後的想法

在聊天網站,就像Omegle或Facebook的聊天,兩個人如何相互交談?他們自己的計算機上的套接字是否直接連接到彼此,或者......傢伙A向Web服務器發送消息,服務器將此消息發送給B人,反之亦然?

因爲在第一種情況下,兩個用戶都可以檢索對方的IP,而在第二種情況下,由於您正在連接到服務器,因此您不能......對嗎?

非常感謝您爲我解決這個困惑,我很新,我非常感謝您們的幫助!

回答

0

通常它們都連接到服務器。

這樣做有幾個原因。例如,假設您希望用戶查看對話的最後10條消息。誰將存儲這些信息?一個客戶?都?如果他們使用多臺PC /設備會發生什麼?如果其中一個人離線,會發生什麼?那麼,您將不得不將消息發送到服務器,這樣服務器將存儲對話歷史記錄,並始終可用。

另一個原因,想象一個用戶不在線。如果用戶處於脫機狀態,則無法與他聯繫。您無法連接。所以你必須發送消息到服務器,並且服務器會在線通知用戶。
因此,您可能需要連接到服務器(存儲常用信息,提供脫機消息,跟蹤活動用戶......)。

還有一個原因,如果你希望兩個用戶直接連接,你需要其中一個啓動一個監聽(公共IP)端口的服務器,並讓另一個連接到該ip:端口。那麼,這是一個問題。如果使用客戶端 - >服務器模型,則不必擔心,因爲您可以輕鬆地在服務器中打開一個端口,而無需路由器和NAT。

+0

非常感謝,所以這基本上是p2p和客戶端/服務器之間的區別。順便說一句,你知道有什麼好的客戶端/服務器框架可以幫助構建一個實時網絡聊天應用程序嗎? – user2567834

+0

Node.js + Socket.io對綽綽有餘。但是支持websocket的任何東西都可以工作,這實際上是「實時」的關鍵。 – TheBronx

+0

對不起,我的意思是*視頻*基於客戶端/服務器結構的聊天應用程序。我發現這個WebRTC,但它是P2P,所以它可能不安全。 – user2567834

0

大多數聊天將使用推送通知系統。它會跟蹤聊天中的人,當它收到聊天的新消息時,它會將其推送給當前所有人。這可以防止用戶看到對方。