我正在寻找允许客户端从服务器接收消息(推送通知)的选项。客户端是一个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,纯文本或二进制文件,则无关紧要。
答案 0 :(得分:1)
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)是一种通信 基于XML的面向消息的中间件协议(Extensible 标记语言)。该协议最初被命名为Jabber,和 是由Jabber开源社区于1999年开发的 实时,即时消息(IM),状态信息和联系人 清单维护。协议设计为可扩展,也具有 用于发布 - 订阅系统,VoIP,视频信令, 文件传输,游戏,物联网等应用 智能电网和社交网络服务。 (from Wikipedia)
Apache ActiveMQ是一个用Java编写的开源消息代理 与完整的Java消息服务(JMS)客户端一起使用。它提供 “企业特色”在这种情况下意味着培养 来自多个客户端或服务器的通信。支持的客户 通过JMS 1.1包括明显的Java以及其他几个“交叉 语言“客户。通过如下功能管理通信 计算机集群以及将任何数据库用作JMS的能力 除虚拟内存,缓存和日志之外的持久性提供程序 持久性。 (from Wikipedia)
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 ++编写的。