2014-11-08 114 views
0

我已经在python中创建了一个简单的聊天程序,它允许许多客户端连接到一台服务器。我现在想创建一个双服务器模型,仍然有很多客户端,以便客户端能够连接到任一服务器。然后,当客户端向server1发送消息时,它将向所有连接的客户端广播,并发送给server2,然后server2将广播给所有(server2的)连接的客户端。我坚持的部分是服务器到服务器的通信。我想在同一子网的本地局域网上执行此操作;我不想通过互联网来做到这一点,所以不需要担心DNS或其他协议。分布式本地聊天服务器

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

任何帮助在这里将不胜感激。

+0

您看过XMPP,这是GTalk/Google环聊使用的技术吗?你在找什么? – 2014-11-08 04:37:29

回答

0

我不认为线程是一个问题在这里。您可以使用或不使用它来设计解决方案。

总之,您的服务器与您的客户并没有太大的不同。他们连接到其他服务器并向他们发送文本/数据。你唯一需要特别处理的是重播客户聊天。

这特别棘手,并且会遇到很多问题。你可以看看IRC如何处理它。如果您留在局域网内,您将面临多个可能会缓解的问题。在IRC中,所有的服务器都是相当平等的,所以把它们放在一起不应该影响整个网络(实际上这是不同的:p)。

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

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