如何使用SmackAPI发送广播消息?

时间:2013-05-13 15:19:18

标签: java xmpp broadcast smack

我们正在开发使用XMPP相互通信的特殊设备。我正在开发的新API,也应该与这些设备对话。我面临的问题 - 所有这些设备都在为我们拥有的每个客户构建一些小组......所以我们将为每组设备提供一个聊天室,或者为每个客户提供一堆设备;)

但是现在...... api应该可以与每个连接的设备通信。我不需要真正的广播机制 - 最后,我只会向一个特定设备发送消息..

但我不想登录每个聊天室 - 运行一个拥有超过4万客户和更多设备的产品,将以一个有趣的api结束,即在启动时打开超过4万个聊天室...即使不尝试这个,我也无法想象这样的应用程序会运行良好......即使我们可以在几年内拥有数百万的客户......我不喜欢与之相关的解决方案客户数量,如果你知道我的意思:/

现在,基本上我正在考虑一个解决方案,我可以使用基本的XMPPConnection来完成我的工作。

MyCustomMessage msg = new MyCustomMessage();
msg.setTo("*"); // don't know what to address, i want to send it to "all"
msg.setFrom("ThatAPI"); // just a string telling that is sent from my java api ;)

msg.setEvent(event); // stuff that is coming through the parameters of the method where this code is inside
msg.setCustomStanza(data); // same here

connection.sendPacket(msg); // my try to send it to all till now..

在Ignite Realtime论坛的某个地方,我读过一个“解决”它的人,但他说的一切都是“它现在正在工作,我通过sendPacket of Connection推送我的消息”......好的,我的尝试这似乎不起作用:(

任何更好的想法/实际实现如何才能正常工作?

基本上我开始认为XMPP不会是最好的技术来实现这样的东西 - 我希望我能有一个真正的/基本的套接字实现,这样的东西将是小菜一碟。但我可以选择 - 第三方系统已经实施了XMPP ......没有足够的时间来改变所有这些......就好像你想知道为什么我们在XMPP上试试这个......

1 个答案:

答案 0 :(得分:3)

您似乎有一些相互矛盾的要求,因为您现在想要发送到所有设备,但之后只会发送一个特定设备。这两种型号是否同时需要,或者您是否计划进行切换?如何完成将是不同的解决方案。

至于你目前的方法,我认为pubsub比你的聊天室方法更有意义,因为它面向传递给订阅者的通用消息。

  • 您可以为每个客户设置一个pubsub节点,以便向所有客户发送消息 他们的设备。
  • 对于所有人的广播,您可以制作所有设备 订阅一个pubsub节点。

因此,您可以通过发送到相应的pubsub节点来控制广播和组消息。

为了发送到特定设备,这只是特定实体的sendPacket,没有什么特别的。