分布式本地聊天服务器

时间:2014-11-08 04:12:19

标签: python sockets chat distributed

我在python中创建了一个简单的聊天程序,允许许多客户端连接到单个服务器。我现在想要创建一个两个服务器模型,仍然有许多客户端,以便客户端能够连接到任一服务器。然后,当客户端向server1发送消息时,它将向其所有连接的客户端广播,并且还发送到server2,然后server2将广播到其所有(server2&s;)连接的客户端。我坚持的部分是服务器到服务器的通信。我想在同一个子网上的本地局域网上这样做;我不是想在互联网上这样做,所以不必担心dns或其他协议。

不确定我是否需要在此处执行多线程,或者只是添加到维护连接并发送/接收数据的while循环。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

我不认为线程是一个问题。你可以设计一个有或没有它的解决方案。

简而言之,您的服务器与您的客户并没有太大区别。它们连接到其他服务器并向其发送文本/数据。你必须要特别处理的是重新广播客户聊天。

这特别棘手,并且会遇到很多问题。您可以查看IRC如何处理它。您将面临多个问题,如果您留在局域网内,可能会减轻这些问题。在IRC中,所有服务器都相当平等,因此将其中一堆服务器关闭不应影响整个网络(实际上这是不同的:p)。

如果server1广播带有时间戳[5秒]的message1然后从server2接收带有时间戳[2秒]的message2,该怎么办?对于客户端,消息将无序显示。

您可以做的一件事是为所有其他服务器选择主服务器。这个将包含主列表并将管理时间戳。所有其他服务器将向其发送客户端消息,并等待“主聊天日志”的同步,然后将新数据广播到所有连接的客户端。如果存在大量延迟,某些消息可能会显示为客户端无序,但至少时间戳将匹配并且将是增量的