2013-05-13 1 views
2

Мы разрабатываем специальные устройства, которые используют XMPP для общения друг с другом. Новый API, который я сейчас разрабатываю, должен также разговаривать с этими устройствами. Проблема, с которой я столкнулся - все эти устройства строят небольшие группы - для каждого клиента у нас есть ... поэтому у нас будет чат для каждой группы устройств или для каждого из наших клиентов с его связью устройств;)Как отправить широковещательное сообщение с помощью SmackAPI?

Но теперь api должен иметь возможность разговаривать с каждым подключенным устройством. Мне не нужен реальный механизм вещания - в конце концов, я отправлю сообщение только одному конкретному устройству.

Но я не хочу входить в каждую комнату - либо запустить продукт с помощью более 40 тыс. клиентов и намного больше устройств, закончится забавным api, который откроет более 40 тыс. чатов при запуске ... даже если этого еще не пробовал, я не могу представить, что такое приложение будет работать хорошо ... хотя мы можем иметь миллионы клиентов через несколько лет .. Мне не нравятся решения, которые будут расти линейно с количеством клиентов, если вы знаете, что я имею в виду:/

Теперь, в основном, я ' я думаю о решении, где я просто могу использовать базовое 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 из Connection» ... ОК Ницца моя попытка это, похоже, не работать :(

Есть лучшие идеи/реальные реализации, как это будет работать нормально?

в основном я начинаю думать, что XMPP не будет лучшей технологии для достижения что-то вроде этого в все - я хочу, чтобы у меня была настоящая/базовая реализация сокета, где что-то вроде этого было бы куском торта. Но я не могу выбрать - третий -партий-система уже реализовала XMPP ... не хватает времени, чтобы изменить все это ... Просто, если вам интересно, почему мы пытаемся это сделать на XMPP.

+0

Звучит как кейс для XMPP PubSub. – Flow

ответ

3

У вас, похоже, есть противоречивые требования в том, что вы хотите отправить на все устройства сейчас, но только 1 конкретное устройство позже. Требуются ли одновременно две модели, или вы планируете переключение? Как это делается, будут разные решения.

Что касается вашего нынешнего подхода, я думаю, что pubsub будет иметь больше смысла, чем ваш подход в чате, поскольку он ориентирован на общее сообщение, передаваемое подписчикам.

  • Вы можете настроить узел pubsub для каждого клиента для отправки сообщений всем своих устройств.
  • Что касается трансляции всем, вы можете сделать все устройства подписаться на один узел pubsub.

Таким образом, вы контролируете широковещательные и групповые сообщения, отправляя их на соответствующий узел pubsub.

Для отправки на конкретное устройство, то есть только sendPacket для конкретной сущности, там нет ничего особенного.

+0

", чтобы отправить все устройства сейчас, но только 1 конкретное устройство позже" извините, я думаю, что мое описание было слишком плохим ;-) мне не нужно что-то посылать ко всем устройствам - я всегда буду отправлять команды только одному устройству ... В любом случае, pubsub кажется интересным! я попробую, если я смогу реализовать что-то подобное на стороне клиента;) спасибо! – jebbie