java - Java EE 中的双工流

标签 java performance jakarta-ee scalability ejb-3.1

我正在寻找使用 Java EE 的全双工流媒体解决方案。

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

与服务器的通信需要尽可能低的开销。输入的数据基本上是一些传感器数据,经过处理后,这些数据被转换成可以描述为一组命令的内容。

我调查过的内容:

  1. TCP/IP 服务器(这是一种非 Java EE 方法)。这将是显而易见的解决方案。从每个客户端应用程序并行打开两个连接:一个用于上游数据,一个用于下游数据。
  2. 远程和无状态 EJB。这意味着不涉及流,我将传感器数据打包在较小的窗口中(1-2 秒的传感器数据),然后将其发送到服务器进行处理并获得处理结果作为响应。对于这种方法,虽然它是可扩展的,但我不确定考虑到我必须每 1-2 秒发出一个请求,它的速度有多快。我仍然需要对此进行测试,但我有疑问。
  3. RMI。从技术上讲,这与 EJB 有什么不同吗?
  4. 两个带有长轮询的 servlet(向上/向下)。我以前没有这样做过,所以需要测试一下。

现在我想测试我的方法 #2 的性能。第一个解决方案肯定有效,但我不太喜欢有一个单独的服务器(在 Tomcat 旁边,我已经在其中运行了一些东西)。

然而,与此同时,是否有任何其他特定于 Java 的(EE 或非 EE)技术可以轻松解决此问题,这将是值得了解的。如果有人有想法,请分享。

最佳答案

这看起来是使用 JMS 的好地方.您可能会使用 Message-Driven Beans 而不是无状态 EJB。 .

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

但是,Tomcat 并未附带 JMS。你可以试试 TomEE或将您现有的 Tomcat 与 JMS 实现集成,例如 ActiveMQ .

关于java - Java EE 中的双工流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14967335/

相关文章:

.net - 如何获取 ManagementObjects 的计数(WMI 结果)而不通过 .NET 中的集合进行枚举

javascript - 将 IF 语句与 OR 一起使用的更好方法

hibernate - 在 Wildfly 10.1 中禁用 Infinispan 集群

java.sql.SQLException : Column count doesn't match value count at row 1 Servlets Error or Mysql Error?

java - 在 persistence.xml 中引用 Tomcat JNDI 数据源

java - 我想读取一个文本文件,分割它,并将结果存储在一个数组中

performance - 提高 ClojureScript 程序的性能

java - 将 servlet 类扩展为自定义类以获得更多自定义响应

java - 如何动态更新绝对路径

java - 使用 <a href> 将值从 jsp 传递到 servlet