【发布时间】:2012-02-25 08:40:46
【问题描述】:
我正在开发一个系统,可以很简单地描述如下:
- 有多个服务器,每个服务器运行相同的 Java 应用程序(为了可扩展性)。
- 有一个公共数据库服务器,每个应用程序服务器都与之通信。
- 数以百万计的客户端,每个都连接到一个随机服务器。每个客户端都有一个打开的套接字和一个服务器。
现在说,客户端 A 连接到服务器 A,并想向客户端 B 发送消息。
解决此类问题的最佳方法是什么?跟踪哪个客户端连接到哪个服务器以及如何使服务器相互通信的最佳方法是什么。
这是一个 Java 特有的问题。如果只有一台服务器,则可以通过线程间通信来完成。但问题出在多台服务器上。另外,是否有任何开源库可以让这项任务变得更容易?
【问题讨论】:
-
一种方法是存储在公共数据库中,哪个客户端连接到哪个服务器。以及什么进程Id和Thread Id有客户端socket,然后使用RMI发送消息。但是有没有更有效的解决方案?
-
我也对这个问题感兴趣。我可以为此使用 ActiveMQ 并通过该主题向所有服务器发送消息,然后在每个服务器上检查消息是否发送给他(按 ID 收件人)?
-
与其将客户端连接到随机服务器,不如让它们连接到由哈希函数确定的特定服务器,例如,它们的 IP 地址?
-
我还没有决定那个策略,但无论如何我仍然需要进行服务器间通信。
标签: java rmi distributed