2012-09-14 15 views
0

在我的情况下访问类,我有一台服务器运行的等待客户端建立连接。客户端需要实例化连接,因为我期望与之通信的计算机具有比我更严格的网络安全性。客户将每天连接到我。所以我有一个处理这个问题的jar文件和进程。服务器端在我的一端,客户端在另一端。接下来,我有一个网页正在运行,当用户点击一个特定的按钮时,我需要告诉服务器应用程序,“好吧,现在发送数据到客户端”。爪哇 - 如何在另一个正在运行的应用

完成此操作的最佳方法是什么?首先,客户端是否在等待数据出现问题?我需要特别的东西,比如心跳等吗?是否有可能扭转情况并让服务器连接到客户端?

接下来,我怎样才能让这个我当用户点击一个按钮,其实谈判已经运行的罐子正在处理的连接启动应用程序?

+0

单个帖子中有很多问题。我认为针对不同问题发布不同的问题会更好。 – kosa

+4

你看过Java RMI吗? –

+1

如果服务器和客户端在同一台机器上,只需使用套接字并实现共享协议,否则查看RMI(甚至可能是Web服务)。 – user1329572

回答

0

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

我应该定义,在web应用程序上下文(您使用的春天?)唯一的实例初始化一个RMI对象,并在RMI注册发布,所以客户端可以连接到它。

由于这个对象被Web应用程序(Web应用程序和类加载器)中创建的,它可以访问你使用一些队列对象。然后,您的web应用程序可以将项目添加到该队列。

你的RMI对象应该有一个单独的线程(不要在Java EE中创建线程滥,只有一个!或者使用一些框架石英)和消费从阻塞队列来执行。

[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(或者超时)。

+0

只有一个客户端,不是我不使用Spring或任何想象的东西。按钮的点击字面上会调用“java -jar myJar.jar”,我想要运行一些计算,然后将数据传递给已经运行的服务器,然后将它传递给在外部计算机上等待一整天的客户端。我能否使用RMI在服务器JVM中公开传入客户端的方法? – Marianna

+0

是的,RMI用于调用远程对象的方法。远程表示任何其他JVM上的对象。您只需在某些RMI注册表中以编程方式“注册”该对象。客户端可以获得发送信息的引用。 – helios

+0

我刚才提到Spring只是为了初始化。如果你有一个简单的webapp,你可以在web.xml中定义一个Context Listener,并且这个监听器onContextInitialized(它在webapp start上)可以创建必要的对象,将它添加到webapp上下文中,以便从webapp访问它并在RMI中注册注册表从任何其他远程调用者访问。如果你想我可以稍后添加示例代码... – helios

0

简单的方式做,这是你的web应用使用按钮点击来决定哪些数据具有可用于客户端它下一次连接。然后,当客户端连接服务器时,发送排队等待的数据。让客户端连接,然后等待某个人点击某个界面,这非常糟糕。

+0

我不确定这是否可能。假设你正在查看一个网站,当你点击一个按钮时,你首先必须建立连接。我不确定如何编写一个位于远程站点的应用程序,该应用程序等待该事件创建连接。 – Marianna

0

客户端 - 服务器通信可以通过RESTful Web服务轻松实现。并且可以使用套接字和通用通信协议轻松实现同一本地计算机上应用程序之间的通信。