java - 为实时目的在 zeromq 中统一

标签 java c++ c tcp zeromq

我需要使用服务器和终端实时实现分析系统。

我使用库 ZeroMq(pub|sub 模式)向客户端发送消息(~40 字节)。

如果我连接 1 个客户端,消息会延迟(有时超过 250 毫秒)。 如果我与 100 个客户端连接,很多客户端会失去交付的一致性(超过 750 毫秒没有一条消息,在那个巨大的数据范围之后)。这对我来说非常重要。

我必须发布到 6000 多个终端... 每30ms发布一次,最坏情况下(tcp)每个客户端大约1700bytes

也许我应该使用另一种技术来实时传递消息?

最佳答案

正如我在评论中所说,多播就是这种方式。最主要的问题是您的终端是否可以加入您正在发布的组 - 无论它们相距多远。

您没有说明终端如何连接到您的网络 -(例如互联网上的 vpn,专线等等。)您要求更好的技术 - 它是多播。

如果您要走 tcp 路线,现在有一些选择:

  • 构建位于您的前端的负载平衡基础架构 服务。这意味着您的终端没有连接到您的 服务,而是一组负载均衡器,然后连接到您的 服务。例如,如果你有 10 个,每个只需要处理 拥有 600 个客户。你的问题要小得多 - 你可以扩展这个 方法。不要忘记使用异步 io。
  • 购买更好的硬件 - 例如 solace 或 tervela 做硬件 可以扩展到非常大数量的并发 tcp 的消息代理 连接 - 但这并不便宜。

关于java - 为实时目的在 zeromq 中统一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33816993/

相关文章:

c++ - 内存块之间的逻辑操作?

c - windows下编译win32 api c程序实例(命令行方式)

c - 递归列表

java - 为什么我的线程不同步?

java - Set<String> 类型的变量返回不可读的输出格式?

java - Spring Autowired 实例在每个请求上始终相同

java.lang.ClassNotFoundException : org. owasp.encoder.Encode

c++ - 为什么用作嵌套成员的非模板类是不完整类型?

c++ - 混淆了堆的两种不同实现

c - 在 C 中返回字符串中的排列