首页 文章

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

提问于
浏览
0

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

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

1 回答

  • 0

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

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

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

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

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

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

    Bayeux继承了它所进行的传输协议的特性 . Bayeux协议本身本身并不具有任何“双工”特性,您可以将其视为一种格式化特定文本形式的消息的方式 .

    CometDFaye都通过WebSocket和HTTP长轮询使用Bayeux .

相关问题