为什么HTTP + Web套接字不适合作为消息传递协议?

时间:2015-09-01 18:18:12

标签: websocket message-queue amqp stomp

我已经读过HTTP在适用于RabbitMQ的here等几个地方不适合作为消息传递协议。

我认为这有一个技术原因,而且这不仅仅是一种意见。我已经浏览了AMQP spec,但无法看到HTTP + Web套接字无法正常工作的原因。实际上,对于AMQP而言,Web套接字似乎存在works。此外,我已经查看了使用HTTP + Web套接字的STOMP协议,并且看不到任何重大限制(除了小的性能损失)。

HTTP + Web套接字缺少哪些技术特性使其不适合作为消息传递协议?

更新: 这就是我要找的:Crossbar.IO - 一个WAMP消息代理。我需要一个消息代理,我可以从浏览器轻松连接到它,并且对RabbitMQ(通过STOMP)或HiveMQ(MQTT)不满意。

1 个答案:

答案 0 :(得分:3)

HTTP是基于请求/响应的,这使得以发布者/订阅者方式工作变得困难。基本上,您可以轮询新消息的来源,也可以创建另一个本地端点,而另一端将消息推送给您。

WebSocket与众不同。尽管作为HTTP请求启动,它仍然可以直接切换到持久的全双工连接,其中两端都可以推送数据。基本上,在这种情况下,HTTP仅用作协议来协商连接,一旦协商,WebSocket就会使用自己的协议来传输数据。

更新:我们很清楚HTTP不是消息传递协议,因为它是请求/响应。 WebSockets虽然允许从两端推送数据,但它也不是消息传递协议。它定义了一种构建数据的方法,但没有定义语义或语法来订阅主题或任何有关消息传递的操作。例如,WAMP是websockets的实际消息传递协议。