[英]Duplex streaming in Java EE
我正在寻找使用Java EE的全双工流解决方案。
情况:客户端应用程序(JavaFX)从外围设备读取数据。 这些数据需要近乎实时地传输到服务器进行处理,并且异步地获得响应,同时它不断发送新数据进行处理。
与服务器的通信需要尽可能低的开销。 进入的数据基本上是一些传感器数据,并且在处理之后它被转入可以被描述为一组命令。
我调查了什么:
现在我想测试我的方法#2的性能。 第一个解决方案肯定会起作用,但我不太喜欢拥有一个单独的服务器(在Tomcat旁边,我已经运行了一些东西)。
然而,同时,值得知道是否有任何其他Java特定(EE或非)技术可以轻松解决这个问题。 如果有人有想法,请分享。
这看起来像是使用JMS的好地方。 您可能会使用Message-Driven Beans而不是无状态EJB。
这为您提供了类似于第一个解决方案的方法,使用两个消息队列而不是TCP / IP连接。 JMS使您的通信完全异步,并且在您的客户端可以尽可能快地发送消息的意义上是低开销,而不管服务器使用它们的速度有多快。 您还可以获得交付保证和其他JMS善良。
你可以尝试很多选择。 适当的解决方案取决于应用程序的性质,通信协议,数据传输类型,对客户端和服务器的控制以及客户端服务器路由上的防火墙限制。
在您的问题中没有太多关于此的信息,但鉴于您提供的内容,您可能希望看看netty,因为它非常通用且灵活,似乎符合您的要求。 Netty还包括双工websocket实现。 请注意,基于netty的解决方案实现起来可能更复杂,并且需要比其他一些解决方案(例如jms)更多的背景研究。
GraniteDS中的另一个可能的解决方案,它宣传JavaFX客户端集成和多服务器集成以进行全双工客户端/服务器通信,尽管我还没有使用它。 GraniteDS使用Comet(您的两个具有长轮询模型的异步servlet)和您可能熟悉的Flex / Flash数据的Active Message Format。
你看过websockets作为解决方案吗? 众所周知,它们会保持持久连接,因此异步响应会很快。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.