2012-04-17 126 views
2

我有Chat Client Server应用程序,我们正在扩展。所以我需要在两台聊天服务器之间进行服务器间通信。通过Java套接字的InterServer通信

问题是:假设有两个服务器A和B现在假设客户 C1被TCP连接与服务器A和与 服务器B. 客户端C2被连接TCP然后问题是:作为同一器件的应用客户端C1和C2应该能够相互识别为已登录并可在线使用,但由于没有内部服务器 通信,因此不会发生这种情况。

可能的解决方案否1是:使用TCP连接将服务器A和服务器B登录到每个其他 。在这里,我可以通过 TCP连接将登录XML 消息(字符串)和DataInputStream转发到其他服务器。所以每个登录都被转移到另一台服务器上,以便每台服务器都可以访问每个客户端,客户端C1可以看到 客户端C2已登录(在线),反之亦然。

解决方案1的问题是:假设客户端C1现在可以看到Client C2为 ,并且客户端C1向客户端C2发送消息。 会发生什么是服务器A将尝试写入DatainputStream为客户端 C2它建立在服务器B上,而不是在服务器A上。这里是 问题的代码将在这里打破,服务器A将无法发送 消息给客户端C2。

任何输入将不胜感激。

谢谢

+0

为什么您需要扩展到多台机器?我们在谈论多少用户?您是否已经使用了非阻塞IO或者仍然使用每个连接的一个线程?如果可能的话,避免在多台机器上扩展 - 这是一个(有状态)的痛苦世界。 – 2012-04-17 07:39:21

+0

谢谢reply.Well我的客户希望确保如果他会得到更多的打击他的产品,他应该能够扩大规模。我们讨论了基准测试和除了新产品以外的所有产品,他无法计算可能的命中数。所以我必须实施服务器间通信,无论如何,正如我上面所解释的。该产品已经在使用每个连接使用Thread.am思考非阻塞套接字,它的即将到来。所以在你的想法中的任何可能的解决方案呢? – Java 2012-04-17 08:08:28

回答

3

你可以看看IRC服务器如何实现这样的功能。我相信你只需要编写另一个服务器来处理你的服务器作为客户端,并向他们请求以找到具体的用户。

http://tools.ietf.org/html/rfc2810

+1

谢谢re3ply @AlexTheo。你能为你的答案建议有用的链接吗? – Java 2012-04-17 12:33:24

+0

我看到实际上IRC服务器在内部实现(服务器服务器),因此如果您需要遵循irc的方式,您需要在内部为服务器实现服务器。 http://tools.ietf.org/html/rfc2810 – AlexTheo 2012-04-18 09:27:17

+0

否则只是实现另一个服务器(服务器服务器)(分开),在我看来这是更灵活的解决方案。 – AlexTheo 2012-04-18 09:28:32