我们正在开发消费类硬件产品。每个设备都在中央网络服务器上注册,并且所有者还拥有设备链接的用户帐户。所有者还可以选择与其他用户共享该设备。
现在,为了解决通过防火墙等问题我们正在使用XMPP:用户使用iOS / Android应用程序访问他/她的设备。该应用程序连接到XMPP服务器,硬件设备也是如此。因此,应用程序可以通过发送自定义XMPP节来访问设备。
目前,设备和移动应用程序使用相同的JID,因此设备将仅允许来自与其自身使用的相同裸JID的消息。为了允许共享设备,我们计划使用名单:设备将获得自己的JID(" hw381983829@thexmppserver.com")并接受其名单中所有JID的节。
我遇到的问题是用户,设备和设备共享数据都存储在网络服务器上。我想在XMPP服务器上使用相同的信息:允许Web服务器上的所有用户和设备登录到XMPP,并且设备的名称与可以访问它的用户相同。可以通过JSON API访问此信息。
一种方法是在发生变化时反映变化,但我不喜欢这个想法,因为有太多步骤可能出错。
我能想到的最佳解决方案是让XMPP服务器使用JSON API而不是内置数据库。它是只读的,但这不是问题,因为所有注册和共享都应该在网络服务器上完成。
有关如何进行的任何想法?上述功能或多或少都是我们所需要的:我们不需要S2S,离线消息等。我们目前正在使用Ejabberd,但Prosody或Openfire可能是更好的选择?
答案 0 :(得分:1)
对于身份验证,看起来这个ejabberd贡献完全符合您的需求:
https://github.com/processone/ejabberd-contrib/tree/master/ejabberd_auth_http
对于名册,由于ejabberd API,很容易编写一个自定义名单模块,该模块将访问您的HTTP后端而不是查询数据库。
您可以查看mod_roster
作为实施方法的指南:https://github.com/processone/ejabberd/blob/master/src/mod_roster.erl