使用HTTP作为传输的消息传递中间件

时间:2013-08-26 18:53:55

标签: c++ c http embedded message-queue

我正在寻找允许客户端从服务器接收消息(推送通知)的选项。客户端是一个ARM / Linux嵌入式设备,与Raspberry Pi的功能类似。

因为客户端可能位于防火墙后面,所以我想使用可以在HTTP上传输的面向消息的中间件(MOM)。我认为这排除了基于AMQP的MOM。

MOM服务器应该支持Linux平台。 MOM还应提供可在ARM / Linux平台上编译的C或C ++客户端库。

我知道HTTP长轮询技术,以及HTML 5 WebSockets和Server-Sent Events。但我更喜欢更高级(但轻量级)的解决方案,它负责通过HTTP在点A和点B之间传输消息。如果消息必须格式化为XML,JSON,纯文本或二进制文件,则无关紧要。

2 个答案:

答案 0 :(得分:1)

我成功使用的两个是XML-RPCgSOAP

  • XML-RPC:

      

    这是一个规范和一组实现,允许在不同的操作系统上运行的软件,在不同的环境中运行,以通过Internet进行过程调用。

      它是远程过程调用,使用HTTP作为传输,使用XML作为编码。 XML-RPC旨在尽可能简单,同时允许传输,处理和返回复杂的数据结构。

  • gSOAP的:

      

    gSOAP工具包是用于SOAP / XML Web服务和通用(非SOAP)C / C ++ XML数据绑定的C和C ++软件开发工具包。该工具包分析WSDL和XML模式(单独或作为组合集),并将XML模式类型和SOAP消息传递协议映射到易于使用且高效的C和C ++代码。它还支持通过自动生成XML序列化代码和WSDL规范将(传统)C和C ++应用程序公开为SOAP / XML Web服务。或者您可以简单地使用它自动将XML转换为C和C ++数据。该工具包支持使用或不使用STL生成纯ANSI C或C ++的选项。

答案 1 :(得分:0)

根据我的研究,这些是可用的MOM技术,它们使用HTTP作为传输,并且具有C / C ++客户端库:

XMPP

  

可扩展消息传递和在线协议(XMPP)是一种通信   基于XML的面向消息的中间件协议(Extensible   标记语言)。该协议最初被命名为Jabber,和   是由Jabber开源社区于1999年开发的   实时,即时消息(IM),状态信息和联系人   清单维护。协议设计为可扩展,也具有   用于发布 - 订阅系统,VoIP,视频信令,   文件传输,游戏,物联网等应用   智能电网和社交网络服务。 (from Wikipedia

ActiveMQ

  

Apache ActiveMQ是一个用Java编写的开源消息代理   与完整的Java消息服务(JMS)客户端一起使用。它提供   “企业特色”在这种情况下意味着培养   来自多个客户端或服务器的通信。支持的客户   通过JMS 1.1包括明显的Java以及其他几个“交叉   语言“客户。通过如下功能管理通信   计算机集群以及将任何数据库用作JMS的能力   除虚拟内存,缓存和日志之外的持久性提供程序   持久性。 (from Wikipedia

Zerogw

  

Zerogw是一个http到zeromq网关。这意味着它会侦听HTTP,   解析请求并使用zeromq套接字(ZMQ_REQ)发送它。然后等待   用于回复并使用从zeromq socket接收的数据进行响应。

     

从v0.3开始,zerogw也支持WebSockets。 Websockets是   通过使用ZMQ_PUB套接字转发传入消息来实现,和   从ZMQ_SUB套接字监听clommands。每个WebSocket客户端都可以   订阅了无限数量的主题。每个zeromq消息吧   控制消息(例如订阅)或指定的消息   将有效发送到订阅的每个WebSocket的主题   那个特别的话题。 (from the GitHub zerogw page


还有超文本InterORB协议(HTIOP),但TAO似乎是唯一支持它的CORBA ORB。似乎没有人使用它(如果我错了,请纠正我。)

work in progress来启用OMG的Data Distribution Service(DDS)网络。

我也热衷于使用WebSockets进行双向通信,尽管它们具有“低级”性质。对于那些感兴趣的人,可用的C / C ++库包括:

有一个开放的Websocket Application Messaging Protocol(WAMP),它为远程过程调用和发布 - 订阅模式提供异步消息传递模式。 WAMP有许多implementations,但没有一个是用C / C ++编写的。