java - Java 中的高效 TCP 服务器和数据转换

标签 java xml tcp hl7

背景

在我的 java 应用程序中,ConcurrentHashMap 中有相当大量的数据。

现在,当客户端通过 TCP 端口连接到我的应用程序时,我需要以 XML 格式将此数据提供给消费者客户端。

简而言之 - 我有一个客户端连接到的 TCP 服务器。一旦客户端连接,我就必须读取 Map 中的所有数据,并在 TCP 端口上以 XML 格式(自定义)吐出。 map 中的数据不断从其他地方使用工作线程等自动更新,所以我必须不断地在这个 tcp 端口上向客户端发送新数据。

我想实现一个内存和CPU效率高的解决方案 - 主要是我不希望在堆中生成太多不可变对象(immutable对象)。 .

注意:将来我可能必须支持多种输出格式(例如逗号分隔或 Json 或 HL7 等)。为了简单起见,假设客户端可以连接特定格式的不同 TCP 端口。

问题

话虽如此,我一直在寻找适合我的 TCP 服务器实现以及从 ConcurrentHashMap 到 XML 的数据转换过程的最佳解决方案。

对于 TCP Server,人们谈论

我的客户将是第三方,所以我认为 kryonet 已经出局了,因为客户不会做 Kryonet 所需的“注册”业务。那么 MINA 和 NETTY 中,哪一个具有可扩展性并且更易于理解呢?还有其他建议吗?

对于从 ConcurrentHashMap 到 XML 的数据转换,我正在考虑使用 XSTREAM 还有其他建议吗?

谢谢

最佳答案

如果您有数百或数千个连接,您应该开始考虑可扩展性。但是,如果您的连接数量较少,那么使用普通套接字可能就足够了。

如果只有部分数据发生变化,则最好只发送已更改的数据,或者至少仅重新生成已更改的 XML。

关于java - Java 中的高效 TCP 服务器和数据转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6765247/

相关文章:

java - JSP 和 JSTL 根据规则有条件地呈现表中的行

java - 为什么这两个对象为空?

java - 如何在不覆盖现有数据的情况下使用 DOM append 现有 XML 文件?在 java

swift - swift 中的基本 tcp/ip 服务器

java - 在 NetBeans 中看不到包 javax.sound.sampled

java - 这个命令是什么意思 - "nohup ./standalone.sh -b 0.0.0.0 &"?

java - Android - fragment 重叠

java - 如何区分字节数组和字符串

Android 在屏幕关闭时断开 tcp 连接

java - DAO 层上的 Junit 测试为 postgresql exists() 查询返回错误结果