0

我是一名 Java EE 开发人员。

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

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

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

我说的是实时系统。

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

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

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

谢谢

4

4 回答 4

0

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

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

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

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

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

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

于 2012-06-13T07:58:14.813 回答
0

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

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

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

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

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

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

编辑1:

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

我看到一个开源项目JGroups看起来有一些东西。您可能还想查看 Actors Remote Actors,我对这两个项目都没有任何经验,因此您的里程可能会有所不同。

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

于 2012-06-13T17:09:37.230 回答
0

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

于 2012-06-22T15:34:54.300 回答
0

这个问题通常使用某种消息队列来解决。

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

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

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

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

于 2012-06-22T15:59:05.547 回答