机器对机器(M2M)通信的XMPP

2 投票
3 回答
2090 浏览
提问于 2025-04-17 10:18

我正在做一个基于位置的服务项目,里面有几个传感器需要把数据异步发送到服务器,服务器会把这些数据关联起来并生成结果。传感器之间也会有一定的通信,我想用XMPP作为传输方式,因为它的消息传递效率高、实时性好,并且能穿透网络地址转换(NAT)。

我希望能找到一个关于(Python或其他语言)XMPP机器对机器(M2M)服务的例子,最好是用发布/订阅模型来进行异步通信,而不是轮询式的远程过程调用(RPC)。我在网上或者我看到的XMPP书籍中找不到这样的例子,因为大多数内容都是关于人和人之间的互动,比如聊天、视频等。

我需要处理的一般要求有:


1. 多个传感器通过XMPP相互分享数据


2. 异步(发布/订阅)通信,订阅感兴趣的消息


3. 希望用Python编写,但任何语言都是一个好的起点


4. 服务器将所有传感器的数据关联起来并生成结果,这些结果可以提供给订阅者


5. 通过发现功能,方便配置和设置

如果你有任何建议或者好的起点,我会非常感激。

谢谢!

3 个回答

1

我对那些要求一点都不了解,但你可以用SleekXMPP来自己搭建。它是一个纯Python写的,文档也很齐全的XMPP库。XMPP被用来实现计算机之间的通信,这样挺不错的,因为你可以直接从自己的聊天客户端进行测试。比如,你可以看看这个链接:http://www.python.org/about/success/projectpipe/

祝你好运!

2

这个内容很符合XMPP的发布-订阅模型。

  • 你的所有机器都可以同时是发布者和订阅者。
  • 在这种情况下,你的处理服务器也是一个订阅者,它会在接收到发布的内容时进行数据处理。

你找到的任何关于发布-订阅的例子都可以轻松应用。在XMPP中,JID(Jabber ID)代表的是用户还是机器并不重要,而且发布-订阅并不是专门为了人和人之间的互动,跟多用户聊天不一样。

有很多XMPP服务器支持发布-订阅功能。我自己用过SmackOpenFire来实现类似的功能。服务器对你来说并不是特别重要,因为任何支持发布-订阅的现成产品都可以满足需求。更重要的是要有一个支持发布-订阅的客户端库。我知道Smack有这个功能,但它是Java库,不是Python。

3

XMPP用于机器对机器(M2M)听起来是个不错的主意。

关于客户端和服务器的内容,可以参考这个链接:http://xmpp.org/about-xmpp/technology-overview/pubsub/

在发布-订阅(pubsub)系统中,服务器基本上负责所有复杂的工作,而客户端需要实现的智能功能很少。不过,这也要看你想用发布的信息做什么。我还没有测试过任何客户端,真正能对发布的信息进行处理。

撰写回答