0

背景

在我的 Java 应用程序中,我在 ConcurrentHashMap 中有相当多的数据。

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

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

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

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

问题

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

对于 TCP Server,人们谈论

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

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

谢谢

4

2 回答 2

1

如果您有 100 或 1000 个连接,您应该开始考虑可扩展性。但是,如果您的连接数量很少,则可能只需要使用普通套接字。

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

于 2011-07-20T16:38:29.200 回答
1

它需要多快?似乎您应该能够创建仅使用 tomcat 和 spring-mvc 之类的标准框架在不到 10 毫秒(加上 RTT)内返回的东西。使用 JAXB 将对象转换为 XML。如果您想支持像 json 这样的其他输出格式,这很简单(为此使用 Jackson 库,api 类似于 JAXB)。

我有一位同事尝试了套接字服务器方法,最后我们使用了 tomcat,因为它几乎一样快,而且 QPS 更稳定/可预测。

于 2011-07-20T16:38:54.130 回答