0

在我的场景中,我有一个正在运行的服务器,它等待客户端建立连接。客户端实例化连接是必要的,因为我要与之通信的计算机具有比我更严格的网络安全性。客户每天都会联系我。所以我有一个 jar 文件和正在运行的进程来处理这个问题。我这边是服务器端,另一端是客户端。接下来,我有一个网页正在运行,当用户单击特定按钮时,我需要告诉服务器应用程序,“好的,现在向客户端发送数据”。

实现这一目标的最佳方法是什么?首先,客户端等待数据有问题吗?我在这里需要什么特别的东西,比如心跳等吗?是否可以扭转这种情况并让服务器连接到客户端?

接下来,我怎样才能使我在用户单击按钮时启动的应用程序实际上与正在处理连接的已经运行的 jar 对话?

4

2 回答 2

0

Client-Server communications can be easily achieved via a RESTful web service. And communications between applications on the same local machine can be easily achieved using sockets and a common communications protocol.

于 2012-09-14T15:45:44.323 回答
0

你需要的是决定传输层。如果您使用RMI(如果您在所有通信端点中使用 Java,这很有意义),您就不需要 heatbeat 或其他东西。

我应该在 web-app 上下文中定义一个唯一的实例,它初始化一个 RMI 对象并将其发布在 RMI 注册表中,以便客户端可以连接到它。

由于此对象是在 webapp 进程(和 webapp 类加载器)中创建的,因此它可以访问您使用的某些队列对象。然后您的 web 应用程序可以将项目添加到该队列。

您的 RMI 对象应该必须在单独的线程中执行(不要在 Java EE 中创建不分青红皂白的线程,只创建一个!或使用某些框架作为 Quartz)并从阻塞队列中消耗。

[webapp]
   configfile
   create thread with server object
      publish server object with getinfo method
      getinfo method consumes from queue (queue.take())


[client]
    connect via RMI to server object
    call method get info

如果客户端可以在不读取新项目的情况下停留很多时间,并且有很多客户端,那么从没有项目(或超时)的队列中返回 null 可能是值得的。

于 2012-09-14T14:42:32.553 回答