2013-07-15 79 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

大多数聊天将使用推送通知系统。它会跟踪聊天中的人,当它收到聊天的新消息时,它会将其推送给当前所有人。这可以防止用户看到对方。