app后端设计(2)--xmpp的使用(2014.01.14更新)

在app中有时候是需要添加聊天服务,在这里谈谈曾经开发聊天服务的经验:

(1)聊天服务端选的openfire,这是一个基于xmpp协议的聊天服务器(XMPP是一种基于XML的协议,它继承了在XML环境中灵活的发展性。因此,基于XMPP的应用具有超强的可扩展性。经过扩展以后的XMPP可以通过发送扩展的信息来处理用户的需求,以及在XMPP的顶端建立如内容发布系统和基于地址的服务等应用程序。而且,XMPP包含了针对服务器端的软件协议,使之能与另一个进行通话,这使得开发者更容易建立客户应用程序或给一个配好系统添加功能。 gtalk,网易泡泡,facebook聊天等都是基于xmpp,具有广泛的包容性)。

网页上的聊天,使用的是strophe.js ,有一本书《XMPP高级编程:使用JavaScript和jQueryXMPP高级编程:使用JavaScript和jQuery》是基于这个strophe.js,里面的例子对于初学xmpp具有极大的参考价值。

(2)xmpp除了可以提供聊天服务,还可以充当消息服务器,例如有什么消息需要推送到客户端却不希望使用推送工具,xmpp也是个选择。

(3)有时候同一个账号需要在不同的客户端同时登陆服务端,例如,网页端和ios会出现用同一个账号登陆聊天服务器的情况,为了保证两个客户端都能收到聊天消息,需要做下面两地:

a.相同的账号需要使用不同的resource,可用时间戳生成,如vim@gmail/1359956556,vim@gmail/1359956777。

b. 在后台 Admin Console> Server Manager > System Properties中,设置“route.all-resources”为true

(4)一些常用的openfire插件

Subscription: 官方的描述是这样的:Automaticallyaccepts or rejects subsription requests

http://download.csdn.net/detail/newjueqi/6024521: 一个保存openfire聊天记录的插件,当根据我的使用经验,这个插件是把全部聊天记录保存在一个表中,性能极差,只能勉强应付法律规定要保存3个月聊天记录这个需求,在实际应用中没啥用。

(5)php的xmpp library

如果服务器是使用php,那么能使用的xmpp客户端就只有xmpphp,这个libary只提供了最基本的发送消息功能,很多常用的功能都没有提供,我根据开发经验把一些常用的xmpp功能开发出来,并整合到xmpphp中:

registerNewUser            //注册一个新用户

addRosterContact           //发送添加好友的请求

accept friend request      //接受好友请求

deleteRosterContact        //删除某个好友

roomMessage                //发送群聊消息

createChatRoom             //创建群聊

kickUserOutToChatRoom      //把某个人剔除群聊

项目的地址:

https://github.com/newjueqi/xmpp

(6)个人开发了一个openfire插件,在手机的聊天应用中,经常出现的一个需求就是把用户的离线消息通过推送系统推送到用户的手机上,为了实现这个功能,本人就开发了本插件,这个openfire 插件是拦截了发给openfire用户的离线消息,然后根据自身的业务逻辑推送到手机上。详细介绍:http://blog.csdn.net/newjueqi/article/details/18032925

(7)openfire中发送某些特殊字符会断开xmpp连接的问题,解决方法请看:http://blog.csdn.net/newjueqi/article/details/18260197

另外一个好消息,https://layer.com/ ,这个网站打算提供一个聊天平台,ios 和android 应用简单整合就能提供聊天服务,密切关注中。如果真的能实现,那么对于app提供聊天服务是个很好的选择。

但有几个问题:

1. 它现在还没正式上线

2. 访问外国网站的风险

3. 法律规定要保存3个月聊天记录

app后端系列文章总目录

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

2014.06.25更新

关于创建群组的例子,请看XMPPHP/test.php 文件中的 createEventChatRoom()

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

修改记录:

1. 2014.01.13: 增加了个人开源的openfire插件信息

2. 2014.01.14: openfire中特殊字符导致断开连接的处理

如果您觉得这系列的文章对你有所帮助,欢迎打赏。

支付宝账号:190678908@qq.com 收款人:曾健生

[文章作者]曾健生

[作者邮箱]h6k65@126.com

[作者QQ]190678908

[新浪微博] @newjueqi

[博客]http://blog.csdn.net/newjueqi

http://blog.sina.com.cn/h6k65

版权声明:本文为博主原创文章,未经博主允许不得转载。

上一篇:1、简述在java网络编程中,服务端程序与客户端程序的具体开发步骤?


下一篇:点滴积累【JS】---JS小功能(JS实现多功能缓冲运动框架)