3

我需要实现一个包含用于管理的 Web 界面的 TCP 服务器。

基本上,tcp 服务器将监听新连接并保持当前连接处于活动状态,而 Web 界面允许我查看有关这些连接的信息并与它们进行交互(例如发送消息并查看接收的消息)......

我的担忧在于“TCP 服务器”与 Web 应用程序的集成。对于收到的消息,我可以简单地使用共享数据库,但我需要将消息发送到连接到 TCP 服务器的对等方。

目前我最好的选择是在 JCA 上。一些研究向我指出了一个很好的示例:http ://code.google.com/p/jca-sockets 。该示例使用消息驱动 Bean 来处理通过端口 9000 接收的消息,充当回显服务器。

我是 Java EE 6 世界的新手。我试图弄清楚为什么在示例中以一种或另一种方式完成事情(例如,为什么是 MDB?)。

JCA 有一个相当复杂的规范。因此,我首先尝试调整上面的示例以保持连接处于活动状态以交换数据。我的下一步将是调整它以通过 servlet 接受字符串以将其转发给给定的对等点。

有人可以帮我解决这个问题吗?

4

1 回答 1

3

好吧,首先,将 Java EE 与 TCP 结合使用并不是您可能使用的最佳方法。如果您只需要一个带有 Web UI 的简单 TCP 服务,您最好考虑使用带有一些 Web 容器的 Java SE(undertow 效果很好)。

另一方面,如果您需要将应用程序集成到公司现有的 Java EE 基础架构中,那么 JCA 将是最好的方法。虽然它不是为这类事情而设计的,但 JCA 是唯一一个足够自由的 EE 子系统,可以实现 TCP 网络工作所需的那种线程管理。

您在上面提到的 JCA-Socket 并不是 JCA 应用程序的最佳示例。它通过阻塞 WorkManager 线程使用普通 Java 的阻塞套接字,这不是很有效。现在情况好多了,我们有 Java NIO 和 Netty 来处理高效的原始网络。我有一个用于 TCP 交互的 JCA 连接器,它可以为您提供构建自己的框架。随意扩展和贡献。

PS 关于 MDB:消息驱动 bean 是异步传入消息处理的唯一“合法”JCA 方法。由于 TCP 是异步的,因此您的应用程序中肯定需要一个 TCP 才能开始工作。输出数据传输通过您将注入 bean 的各种 ConnectionFactory 接口进行。上面的链接将为您提供参考 ConnectionFactory 实现以及使用 ConnectionFactory 和 MDB 消息传递方法的简单测试器应用程序。

于 2016-04-18T16:24:09.243 回答