背景
在我的 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/