JavaScript 到 Java 的远程方法接口

3

背景:

一段时间以前,我曾经参与过一个Java服务器-客户端应用程序的开发(建筑自动化是其范围)。第一次尝试中,我们使用Java编写了服务器和客户端,并通过Java RMI(远程方法接口)将它们连接起来。但后来我们认为,使用JavaScript编写客户端会更好,原因有很多(这里不再赘述)。

由于RMI在JavaScript和Java之间无法工作,我们使用WebSockets进行连接,实现了几乎实时的连接。那时候WebSockets还处于早期测试阶段,没有任何文档,许多功能也未被实现。针对协议部分,我编写了一个基于JSON的自定义RMI。我反序列化来自客户端的JSON对象,并使用java.lang.reflection查询自己的服务器应用程序,以获取客户端想要执行的方法。

所有这些都很好地工作,而且我使其相当通用,因此可以在运行时动态插入其他子类,我的RMI仍然能够访问它们。

简而言之:

我一直想知道是否有一种标准方法可以像RMI一样将Java连接到JavaScript(例如需要扩展某个接口,然后就能够使用JavaScript访问这些接口方法)。我不可能是第一个遇到这个问题的人。

对我自己来说:我是一名电气工程师,因此Java、JavaScript或Web技术总体上并不是我在大学里所学习的内容。当涉及到Java时,我知道自己在谈论什么,但对于JavaScript,我完全是一个新手。


用JavaScript编写客户端?是纯JavaScript吗?还是一个Web前端? - Evan Knowles
SOAP浮现在我的脑海中,请参见https://dev59.com/yXVD5IYBdhLWcg3wAGeD。 - Erich Kitzmueller
@Evan Knowles 我认为我们使用了JavaScript和Ajax。我不知道这是否回答了你的问题,因为我没有编写那个客户端。 - jwsc
1个回答

2
为了实现客户端和服务器之间的异步通信,有一些框架可用,如 AtmosphereSpring ReactorDWRSpring WebSockets。 这些框架的基本方法是,它们具有客户端JS文件,作为服务器端方法的存根。这些框架不允许从浏览器关闭请求响应周期。它们会定期发送空消息以保持连接打开,并使数据同步。
市场上也有一些专有API可用于实现这一点,例如Pusher。

也许我漏掉了什么,但我认为那些异步通信框架和我使用的websocket库做的一样。它们“发送消息”,简单来说。如果我想要由于这些消息而执行方法,我必须自己编写代码。是这样吗?为了澄清:在低层级上,RMI也“发送消息”。但是,在其之上构建了更高层次的结构,以执行在RMI消息中指定的函数或方法。是否有更高级别的框架可以为我完成这项工作? - jwsc
从浏览器接收WebSocket消息就像ajax代码的工作方式一样,您可以在服务器端编写方法来处理请求对象中的数据。还要研究消息任务队列,它们在后端即服务器端异步运行。请查看Atmosphere框架,它提供了您需要的功能。 - underdog

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接