CometD(Comet with Bayeux Protocol)是使用HTTP流式传输还是HTTP长轮询?

时间:2015-07-10 03:33:45

标签: ajax comet long-polling http-streaming bayeux

实施Comet有两种技术。一个使用HTTP流,它使用单个持久TCP连接在客户端/服务器之间发送和接收多个HTTP请求/响应。第二个是HTTP长轮询,它使服务器保持连接打开,并且一旦发生事件,响应已提交,连接已关闭。然后,客户端立即重新打开新的长轮询连接,等待新事件到达。

我正在使用Faye红宝石宝石,我注意到它开箱即用Comet / Bayeux。但我无法找出它使用哪种类型的Comet技术。我只是认为Bayeux是发布 - 订阅协议。我很想知道它是否会遇到HTTP流媒体和长轮询的相同缺点。它是否允许全双工通信(双向通信,与半双工不同,允许同时发生。)

1 个答案:

答案 0 :(得分:0)

您对HTTP流式传输和长轮询的定义不正确。

在HTTP流式传输中,客户端向服务器发送请求,服务器回复“"无限"包含小块数据(消息)的响应,通常使用分块传输编码。 此机制已标准化为EventSource(a.k.a服务器发送事件)。 它是一个服务器到客户端的事件推送。 为了让客户端向服务器发送另一条消息,它必须打开一个新的连接。

在HTTP长轮询中,客户端发送服务器持有的请求,直到发生事件(或超时),然后提交响应,但连接关闭。 连接保持打开状态,并且可以在该连接上发送其他请求,包括正常或长轮询请求(当然,一次一个)。

Bayeux protocol是一种基于传输协议(如HTTP或WebSocket)的应用程序协议。

HTTP是单个请求/响应交换的上下文中的全双工协议。多个HTTP交换被序列化(即,一个接一个地执行)。 HTTP请求/响应 exchange 是序列化的单位。

WebSocket是WebSocket消息上下文中的全双工协议。可以同时发送和接收WebSocket消息。 WebSocket消息是序列化的单位。

Bayeux继承了它所进行的传输协议的特性。 Bayeux协议本身本身没有任何"双重性"特征,您可以将其视为一种格式化特定文本形式的消息的方式。

CometDFaye都使用Bayeux进行WebSocket和HTTP长轮询。