0

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

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

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

我知道 HTTP 长轮询技术,以及 HTML 5 WebSockets 和服务器发送事件。但我更喜欢更高级别(但轻量级)的解决方案,该解决方案负责通过 HTTP 在 A 点和 B 点之间传输消息。消息是否必须格式化为 XML、JSON、纯文本或二进制格式并不重要。

4

2 回答 2

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++ 的选项。

于 2013-08-26T19:17:33.910 回答
0

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

XMPP

Extensible Messaging and Presence Protocol (XMPP) 是一种基于 XML(Extensible Markup Language)的面向消息中间件的通信协议。该协议原名为 Jabber,由 Jabber 开源社区于 1999 年开发,用于近实时、即时消息 (IM)、状态信息和联系人列表维护。该协议设计为可扩展的,还用于发布-订阅系统、VoIP 信令、视频、文件传输、游戏、物联网应用(如智能电网)和社交网络服务。(来自维基百科

活动MQ

Apache ActiveMQ 是一个用 Java 编写的开源消息代理以及完整的 Java 消息服务 (JMS) 客户端。它提供了“企业功能”,在这种情况下,这意味着促进来自多个客户端或服务器的通信。支持的客户端包括显而易见的 Java(通过 JMS 1.1)以及其他几个“跨语言”客户端。除了虚拟内存、缓存和日志持久性之外,还可以通过计算机集群和使用任何数据库作为 JMS 持久性提供程序等功能来管理通信。(来自维基百科

零光

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

从 v0.3 zerogw 开始也支持 WebSockets。Websocket 是通过使用 ZMQ_PUB 套接字转发传入消息并从 ZMQ_SUB 套接字监听 clommands 来实现的。每个 WebSocket 客户端都可以订阅无限数量的主题。每个 zeromq 消息要么控制消息(例如订阅),要么控制指定主题的消息,这些消息将有效地发送到订阅该特定主题的每个 WebSocket。(来自 GitHub zerogw 页面


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

使 OMG 的数据分发服务(DDS) 支持 Web 的工作正在进行中。

尽管 WebSockets 具有“低级”性质,但我也开始接受使用 WebSockets 进行双向通信的想法。对于那些感兴趣的人,可用的 C/C++ 库包括:

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

于 2013-08-27T20:13:33.683 回答