
解决方案1
1. 可以参考XMPP协议扩展 XEP0080 http://xmpp.org/extensions/xep-0080.html 来实现两个IM账户之间的位置分享;
2. 采用自定义的扩展XMPP协议,在数据库和应用代码中计算GEO距离,然后按由近到远的顺序排序即可。
方式2有我实现的一个开源openfire插件可供参考,大体协议如下:
REQUEST
<iq id="c919" type="get" from="chris@im.nodexy.com/TCL-S960">
<query xmlns="com.nodexy.im.openfire.location">
<item user="chris" lon="22.323009" lat="29.098763"/>
</query>
</iq>
RESPONSE
<iq id="c919" type="result" from="chris@im.nodexy.com/TCL-S960">
<query xmlns="com.nodexy.im.openfire.location">
<item user="chris1" lon="22.323009" lat="29.098763" sex="0" online="30min"/>
<item user="chris2" lon="22.323009" lat="29.098763" sex="0" online="30min"/>
<item user="chris3" lon="22.323009" lat="29.098763" sex="0" online="30min"/>
... ...
</query>
</iq>
插件地址: https://github.com/node/openfireLBS
解决方案2
附近的人的实现实际是和IM没有关系的。唯一需要集成的地方就是当查看附近的人的方法返回了一个用户列表后,你如果想和这个用户列表中的某个人聊天时,你可以向这个用户发起一个加好友请求。
所以,附件的人只要能获取附件的人的信息就可以了,没有必要依赖IM系统实现。
比如,我们完全可以用一个http restful 接口来实现这个功能。关键问题是服务器上需要知道用户的地理位置信息,这个位置信息需要客户端上报给服务器。
这样看附件的人的功能是比较容易实现的。
版权声明:部分文章、图片等内容为用户发布或互联网整理而来,仅供学习参考。如有侵犯您的版权,请联系我们,将立刻删除。