2012-05-06 3 views
3

Я пишу настраиваемую службу с использованием протокола XMPP, сервера ejabberd и пространственной базы PostGis. Также я пишу клиентов на службу, поэтому у меня есть полный контроль.XMPP Отправка сообщений по критериям на основе местоположения

Пользователь Alice выходит в интернет и должен публиковать информацию для определенных пользовательских объектов, которые находятся в непосредственной близости от нее. Таким образом, пользователь Alice login создает узел pubsub, я хочу, чтобы другие объекты близости были автоматически подписаны на узел Алисы.

Когда Алиса приходит в интернет, мне нужно автоматически запросить postgis об объектах в непосредственной близости и автоматически подписать их Алисе.

В каком направлении вы порекомендовали бы?

Благодаря Eylon

ответ

0

Там не существующий стандарт для делать именно это, но XEP-0060 может быть расширен для достижения этой цели.

В системе, которую я разработал, я дал возможность подписаться на радиус точки + в пределах узла. Это достигается с помощью subscription options, таких как:

<iq type='set' 
    from='[email protected]/barracks' 
    to='pubsub.shakespeare.lit' 
    id='sub1'> 
    <pubsub xmlns='http://jabber.org/protocol/pubsub'> 
    <subscribe node='princely_musings' jid='[email protected]'/> 
    <options> 
     <x xmlns='jabber:x:data' type='submit'> 
     <field var='FORM_TYPE' type='hidden'> 
      <value>http://jabber.org/protocol/pubsub#subscribe_options</value> 
     </field> 
     <field var='location#latitude'><value>52.231</value></field> 
     <field var='location#longitude'><value>-1.49</value></field> 
     <field var='location#radius'><value>10</value></field> 
     </x> 
    </options> 
    </pubsub> 
</iq> 

Затем я настроил услугу PubSub для фильтрации уведомлений в зависимости от области в вариантах подписки. Вещи действительно усложняются, когда объекты перемещаются по местоположению, и вам нужно эмулировать откат, когда элемент, ранее опубликованный клиенту, выходит за пределы области его подписки.

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

+0

Спасибо за ответ! Я немного смущен. Строка iq, которую вы написали, - это запрос на присоединение к узлу. В моем случае Алиса была бы создателем узла, и подписанные сущности будут объектами вокруг нее. Все это должно происходить без вмешательства пользователя. Так что, может быть, вы имеете в виду, что клиент Алисы создаст узел point + radius, а на стороне сервера я перехватит создание узла и сделаю автоматическую подписку на все соседние объекты. Этот отключение будет включать выполнение запроса пространственной базы данных на моем сервере XMPP. – user1063503

+0

О, хорошо, ваш случай немного отличается от моего. Это звучит скорее, чем элементы, имеющие местоположение (как в моем примере), вам нужны * узлы * для размещения. А для абонентов есть автоматическая подписка на узлы на определенном расстоянии от их текущей точки. Верный? – MattJ

+0

Да. Правильно. – user1063503

0

Я не использовал ejabberd, но я бы подумал, что самый простой модуль, который выполняет корреляцию между отслеживанием местоположения и управлением подписками. Такое поведение конкретного типа приложений обычно поддерживается на большинстве серверов XMPP с использованием модулей/модулей curomt.

+0

В этом случае я сделаю запрос пространственной базы данных в моем модуле сервера XMPP? @Робин – user1063503

Смежные вопросы