Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javaee中的双工流_Java_Performance_Jakarta Ee_Scalability_Ejb 3.1 - Fatal编程技术网

javaee中的双工流

javaee中的双工流,java,performance,jakarta-ee,scalability,ejb-3.1,Java,Performance,Jakarta Ee,Scalability,Ejb 3.1,我正在寻找一个使用JavaEE的全双工流媒体解决方案 情况:客户端应用程序(JavaFX)从外围设备读取数据。这些数据需要以近乎实时的方式传输到服务器进行处理,还需要以异步的方式获取响应,同时不断发送新数据进行处理 与服务器的通信需要尽可能低的开销。输入的数据基本上是一些传感器数据,经过处理后,会被输入一组命令 我所调查的: TCP/IP服务器(这是一种非JavaEE方法)。这将是显而易见的解决方案。从每个客户端应用程序并行打开两个连接:一个用于上游数据,另一个用于下游数据 远程和无状态EJB。

我正在寻找一个使用JavaEE的全双工流媒体解决方案

情况:客户端应用程序(JavaFX)从外围设备读取数据。这些数据需要以近乎实时的方式传输到服务器进行处理,还需要以异步的方式获取响应,同时不断发送新数据进行处理

与服务器的通信需要尽可能低的开销。输入的数据基本上是一些传感器数据,经过处理后,会被输入一组命令

我所调查的:

  • TCP/IP服务器(这是一种非JavaEE方法)。这将是显而易见的解决方案。从每个客户端应用程序并行打开两个连接:一个用于上游数据,另一个用于下游数据
  • 远程和无状态EJB。这意味着不涉及流,我将传感器数据打包到较小的窗口(1-2秒的传感器数据),然后发送到服务器进行处理,并将处理结果作为响应。对于这种方法,虽然它是可伸缩的,但考虑到我必须每1-2秒发出一个请求,我不确定它的速度有多快。我仍然需要测试这一点,但我有我的怀疑
  • 马绍尔群岛共和国。从技术上讲,这与EJB有什么不同吗
  • 具有长轮询的两个servlet(向上/向下)。我以前没有这样做过,所以这是需要测试的
  • 现在,我想测试我的方法2的性能。第一个解决方案肯定会奏效,但我不太喜欢有一个单独的服务器(紧挨着Tomcat,我已经在那里运行了一些东西)


    然而,同时,值得知道是否有其他特定于Java(EE)的技术可以轻松解决这个问题。如果有人有想法,请与大家分享。

    您是否将WebSocket作为解决方案?众所周知,它们保持持久连接,因此异步响应会很快

    这看起来是个好地方。您可能会使用无状态EJB,而不是无状态EJB

    这提供了与第一个解决方案类似的方法,使用两个消息队列而不是TCP/IP连接。JMS使您的通信完全异步,并且开销较低,因为无论服务器使用消息的速度有多快,您的客户端都可以尽可能快地发送消息。您还可以获得交付保证和其他服务


    但是,Tomcat不附带JMS。您可以尝试将现有的Tomcat与JMS实现集成,如。

    您可以尝试许多选项。适当的解决方案取决于应用程序的性质、通信协议、数据传输类型、对客户端和服务器的控制以及对客户端-服务器路由的防火墙限制

    在你的问题中没有太多关于这方面的信息,但是考虑到你提供的信息,你可能想看看它,因为它是非常通用和灵活的,似乎符合你的要求。Netty还包括一个双工websocket实现。请注意,与其他一些解决方案(如jms)相比,基于netty的解决方案可能更复杂,需要更多的背景研究


    中的另一个可能的解决方案,它宣传JavaFX客户机集成和多服务器集成以实现全双工客户机/服务器通信,尽管我没有使用它。GraniteDS使用comet(您的两个具有长轮询模型的异步servlet)和活动消息格式来处理您可能熟悉的Flex/Flash数据。

    谢谢您的回答,但客户端不是web浏览器,而是JavaFX应用程序。我将更新我的问题。WebSocket不是特定于浏览器的。只要您可以使用websocket客户端库,就应该能够使用它。我不知道太多。。。但是一个快速的google似乎建议您可以将WebSocket与javafx结合使用。谢谢不幸的是,我受到一些限制,我不能使用任何技术(尽管我很乐意,因为这将是新的东西)。希望你明白我的意思。内蒂似乎并不是很普遍。我想我会给ActiveMQ一个机会。总是最好在你的问题中包含任何约束。是的,我会选择ActiveMQ(至少是测试)。我有时间研究它,而另一边的MDB也帮不上忙,因为我需要将处理过的消息返回给发件人。但我发现ActiveMQ支持消息转换。基本上,我可以在代理中处理消息,然后再将其转发给消费者。