【问题标题】:Push mechanism using Low latency protocol使用低延迟协议的推送机制
【发布时间】:2012-06-13 07:39:06
【问题描述】:

我是一名 Java EE 开发人员。

我想问是否有人可以向我推荐可以处理大量连续信息的低延迟网络协议。

我正在尝试在两台机器之间实现推送机制,将数据负载从机器 A 传输到机器 B。

任何建议都会更受欢迎(关于协议和/或推送机制)

我说的是实时系统。

推送将是从服务器到客户端(1 到多个)。

我想补充一点,传输的每个数据包都很小。但是有大量的数据包必须以非常低的延迟连续传输。

更多要求: 1.客户端设备不在同一个网络中。(所以我猜UDP在这里不相关) 我正在照顾华尔街类型的延迟。如果我丢失了一个数据包,它已经消失了,无需重新发送它,因为它可能不再相关。

谢谢

【问题讨论】:

  • 你想从服务器推送还是点对点推送(只有2台机器)?
  • 我已经编辑了我的问题。谢谢。

标签: java jakarta-ee networking protocols real-time


【解决方案1】:

您需要套接字连接,就像聊天服务器一样。

我为此目的使用了 XMPP 服务器,在整个项目生命周期中都与服务器建立了单个套接字连接。服务器发送节和客户端解析它并执行相应的操作。
它在自定义推送通知方面非常成功,

您可以创建自己的服务器而不是使用 XMPP 服务器,但如果数以百万计,您应该使用 XMPP 服务器。它最适合实时通知。

如果您想要自己的套接字服务器 然后创建一个套接字服务器和所需的客户端以连接到该服务器。您必须自己管理服务器上的所有连接。当您想要发送数据时,请使用该连接来发送/接收数据。

使用套接字的一个好处是客户端不需要使用相同的语言。

一个好的起点可能是 http://biese.wordpress.com/2009/06/14/how-to-create-a-simple-java-socket-thread-server/

【讨论】:

  • 我不想使用第三方实现。我正在尝试自己实现它。
  • 我读到了 xmpp。也许它可以解决我的问题。延迟考虑如何?在我的情况下,客户端不是移动设备,所以没有延迟的借口:)
  • Socket TCP/IP协议基于可靠性和两种方式。 Socket UDP 协议,如果不需要可靠性并且不保证数据报的传递,但要快得多。
  • 你听说过 websocket 吗?有什么经验吗?
  • 那么你将如何让 Push 机制参与其中?
【解决方案2】:

这不是一个容易回答的问题,因为延迟有很多部分。如果您构建发布-订阅方法,您应该查看多播协议或 UDP。

您有什么要求?这些设备是否在同一个平面网络上,您会跨越边界(防火墙、交换机、路由器)吗?所有这些小事都是大局的一部分。

一旦您进入 UDP 和多播,您将需要处理数据包丢失、数据包重传、消息排序、消息完成以及许多其他需要处理的事情。这就是为什么大多数人购买像 Tibco 这样的产品和其他一些消息总线技术来处理这个问题。

如果您正在寻找 Wall St. 类型的延迟,那么您将进入专用路由器/固件的范围。

您也没有真正定义延迟的含义。我收集了您对网络延迟的看法,它受到光速(对不起,这是法律!)在距离上的限制。

延迟也可以是您的代码响应某些事件的时间。

编辑1:

IP 多播是您最好的选择,因为它可以很好地理解并且可以跨局域网路由,前提是您拥有良好的网络基础设施。

我看到一个开源项目JGroups 看起来有点东西。你可能也想看看演员Remote Actors,我对这两个项目都没有任何经验,所以你的里程可能会有所不同。

对于商业软件,我会考虑 Tibco。我不确定他们的产品包装了,但他们曾经有 Tib Rendezvous (Tib RV) 和旧产品(不记得我头顶上的名字),我都用过两者来处理市场数据.

【讨论】:

  • Mike,但当我准备好 IP 多播时,它是基于 UDP 的。正如我在使用几个网络和交叉路由之前写给你的那样。
【解决方案3】:

这个问题通常使用某种message queue来解决。

在 Java 世界中,有一个用于消息队列的标准 API,称为 JMS,并且有许多实现可供选择,包括商业和开源实现。我的公司最近决定开始使用RabbitMQ,因为它似乎是我们调查的实现中最灵活和最强大的。 HornetQ 是众所周知的 JMS 实现中速度最快的。

还有不是 JMS 实现的消息队列;通常,它们更多地关注性能,而不是鲁棒性等特性。有趣的例子包括OpenDDSZeroMQ

我建议你看看 HornetQ。我认为它应该非常接近您的需求。

编辑:我刚刚看到您的评论,您不想使用第三方实施,而是自己实施。那将是一个坏主意。不要那样做。使用良好的第三方实现。

【讨论】:

  • 我想实现自己,因为我想要完全控制以节省延迟。
【解决方案4】:

关于 TIBCO RV,它使用 UDP 协议,但可以通过所谓的路由器守护程序跨越网络边界,所以这也是可能的。

【讨论】:

    猜你喜欢
    • 2011-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-08
    • 1970-01-01
    相关资源
    最近更新 更多