创建多个Java TCP / IP服务器

时间:2015-11-21 15:32:43

标签: java tcp

我有一个Java TCP / IP客户端和服务器程序,它根据客户端的请求交换数据。我现在需要实现此服务器的多个实例,每个实例都包含数据的子集,客户端仍然只连接到主服务器。什么是最好的方法,最好不要多线程?

1 个答案:

答案 0 :(得分:0)

(我同意多线程将是对高可用性和性能的改进,尽管并非绝对必要。)

如果你想要这样的计划:

                          { ---> slave server 1
client ---> master server { ---> slave server 2
                          { ---> slave server 3

...然后,您必须向主服务器添加客户端 API,因为它将具有双重角色:作为服务器,要接收来自客户端的请求,并作为客户端向从服务器发送请求。

如果您已经实现了客户端/服务器通信协议,那么将相同的协议重用于通信主/从服务器将是有用的。

您还必须解决绑定问题:主人如何知道有多少奴隶和哪些奴隶?

  • 如果它们在同一主机中运行,则主机本身可以启动从机。
  • 如果它们在不同的主机中运行,则必须向主站提供此寻址信息:通过主站中的静态配置,或者通过使从站向其发送一个地址消息,只要它们中的每一个都是启动(这意味着主/从协议的复杂化)。

还有可用性问题:如果其中一个奴隶关闭怎么办?

  • 如果网络数据明智地分配在从属设备之间,为了产生大量的冗余数据,问题就解决了,只需让主设备一个接一个地轮询奴隶,直到他得到所有数据所需的数据(corse,这仍将只用于一两个奴隶同时关闭;如果许多奴隶关闭,则无法保证数据可用。冗余有限制。)
  • 如果根本没有冗余,主人必须检测到这种情况,并做出正确反应:
    • 如果它们在同一主机中运行,则主服务器可以动态地重新启动任何服务器。
    • 如果他们在不同的主机上运行,​​那么主人不能通过apporpiate错误消息向客户端报告问题。

如果共享可写数据,则数据同步可能会成为问题。在这种情况下,主设备必须向每个受影响的从设备广播相同的写入。