用java套接字来实现客户端服务器系统的更好的解决scheme

我需要一些有经验的networking人员的build议。

我已经创build了一个系统,旨在监控由auomatic调度程序或操作员启动的用java编写的一些任务(5-30)。 这些任务是从事银行或保险业务的系统。

该系统由multithreading服务器Web应用程序中的客户机类组成。 任务将使用客户端与服务器进行通信,Web应用程序执行相同的操作来监视服务器上注册的任务的性能,Web应用程序也可以向任务发送一些命令,如“停止”或“暂停”。

任务[1-n] <—>服务器<—> webapp

由于Web应用程序必须能够向批处理发送命令,因此存在这个问题。 我find了2个解决scheme:

1)无连接; 没有保持双方之间的开放连接,客户端周期性地向服务器发送状态,并询问服务器是否有命令给他,周期应该是几秒钟,每个请求打开,然后closures一个类似于套接字的连接到http协议的方式。

2)连接; 双方之间保持活跃的联系。 此时,这些任务可以与服务器和服务器进行通信而不用轮询任务。 例如,每当Web应用程序向服务器请求任务的状态时,他都会询问将提供它的客户端。

一会儿,我采用了解决scheme1,并在模拟testing环境中,它工作正常。

问题是,就就业资源和灵活性而言,两者之间的解决办法肯定会更好,如果是的话,哪一个呢?

如果你对这个主题的具体讨论有一些联系,这是很好的。

谢谢再见。

这个问题可能是服务器故障的主题。 这当然是基于意见的。

您的软件的正确架构取决于应用程序将使用的环境的networking和安全架构。 它也将取决于组件之间所需的通信频率,以及多less带宽轮询与持续连接可能使用的频率。

如果这是一个产品正在build立转售,我会尽可能灵活,可能会尝试利用多个架构。

例如,如果客户端和服务器组件运行在相同的安全“区域”中,则可以考虑一种架构,其中任一组件都可以启动与另一组件的通信(实际上使组件“服务器”在某种程度上)。 这将最大限度地减less延迟并消除轮询。

或者,如果客户端将被隔离,服务器无法与客户端进行任意连接(例如,如果客户端位于防火墙的内部,则将其隔离),则可以通过轮询或持久连接客户可能是要走的路。 如果您的轮询频率很高,轮询可能太“昂贵”(从带宽利用的angular度来看),但持续连接需要周期性的“心跳”来保持状态过滤设备的“活跃”。

没有一个适合所有的解决scheme。