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个月聊天记录
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
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
版权声明:本文为博主原创文章,未经博主允许不得转载。
app后端设计(2)--xmpp的使用(2014.01.14更新)的更多相关文章
- app后端设计--总目录 (转)
特此说明,我转载的!!! app后端设计(1)--api app后端设计(2)--xmpp的使用 app后端设计(3)--短信,邮件,推送服务 app后端设计(4)-- 通讯的安全性 app后端设计( ...
- app后端设计--总目录
做了3年app相关的系统架构,api设计,先后在3个创业公司中工作,经历过手机网页端,android客户端,iphone客户端,现就职于app云后端平台bmob(想了解bmob点击这里).其中的乐与苦 ...
- app后端设计(0)--总文件夹
原文:http://blog.csdn.net/newjueqi/article/details/19003775 做了接近两年app相关的系统架构,api设计,先后在两个创业公司中工作,经历过手机网 ...
- [置顶] app后端设计--总目录
版权声明:本文为博主原创文章,未经博主允许不得转载. 做了3年app相关的系统架构,api设计,先后在3个创业公司中工作,经历过手机网页端,Android客户端,iphone客户端,现就职于app云后 ...
- app后端设计(0)--总目录(转)
原文:http://blog.csdn.net/newjueqi/article/details/19003775 做了接近两年app相关的系统架构,api设计,先后在两个创业公司中工作,经历过手机网 ...
- app后端设计(php)
来源:http://blog.csdn.net/column/details/mobilebackend.html?page=1 做了3年app相关的系统架构,api设计,先后在3个创业公司中工作,经 ...
- app后端设计(11)-- 系统架构(2014.12.05更新)
个人认为,在小型的创业团队中,特别是以应用产品为主,在架构后台的时候,需要集中精力解决自身业务上的问题,不是花时间解决第三方已经解决的问题,简单点来说,就是能用第三方服务就使用第三方的服务.基于这个原 ...
- app后端设计(12)--图片的处理
app上线后,不断接受用户的反馈,于是,反馈非常差的情况下,都会有app的改版. 一旦app的改版,都会有比较大的UI改动,一改动UI,那么图片的尺寸也就必须要改变. 在app后端设计(1)—api( ...
- app后端设计(3)--短信,邮件,推送服务(2014.12.05更新)
在app的后端设计中,免不了消息的推送,短信,邮件等服务,下面就个人的开发经验谈谈这方面. (1)最重要的是,各种推送一定要放在队列系统中处理,不然会严重影响api的响应时间. (2)短信方面 以前我 ...
随机推荐
- Junit指定测试执行顺序
原文链接: Test execution order原文日期: 2012年12月06日翻译日期: 2014年7月2日翻译人员: 铁锚说明: Junit4.11版本及以后才支持,建议升级到最新版本.按照 ...
- Android开发技巧——自定义控件之组合控件
Android开发技巧--自定义控件之组合控件 我准备在接下来一段时间,写一系列有关Android自定义控件的博客,包括如何进行各种自定义,并分享一下我所知道的其中的技巧,注意点等. 还是那句老话,尽 ...
- Xcode使用心得01:断点中断问题和调整编译目标
在obj-c系列博文里,我们粗浅的介绍了obj-c的一些语法以及F库中的一些标准类的使用,但是实际编写拿得出手的APP还是得老老实实在os x上用Xcode写啊!最近上网无意中发现还有支持os x和i ...
- ruby TkPackage can't find package BWidget 之解决办法
一个特别短的ruby/tk代码: require 'tkextlib\iwidgets' require 'tkextlib\bwidget' x = 0 101.times {|i| x+=i} T ...
- private static final 修饰符
java修饰符分类修饰符字段修饰符方法修饰符根据功能同主要分下几种 1.权限访问修饰符 public,protected,default,private,四种级别修饰符都用来修饰类.方法和字段 包外 ...
- FreeMarker系列学习笔记
FreeMarker是一个非常优秀的模板引擎,这个模板引擎可用于任何场景,FreeMarker负责将数据模型中的数据合并到模板中,从而生成标准输出.FreeMarker可以提供昜好的团队协作,对于界面 ...
- Dubbo基本特性之泛化调用
Dubbo 是支持泛化调用的,什么是泛化调用呢?泛化调用的好处是什么呢,泛化调用说白一点就是服务消费者并没有服务的接口. 在<Dubbo入门-搭建一个最简单的Demo框架>一文中,我们已完 ...
- 公司内网搭建代理DNS使用内网域名代替ip地址
企业场景 一般在企业内部,开发.测试以及预生产都会有一套供开发以及测试人员使用的网络环境.运维人员会为每套环境的相关项目配置单独的Tomcat,然后开放一个端口,以 IP+Port 的形式访问.然而随 ...
- 【读书笔记】C++Primer---第三章
1.由于为了与C语言兼容,字符串字面值与标准库string类型不是同一种类型: 2.以下代码中,cin有几点需要注意:a.读取并忽略开头所有的空白字符(如空格.换行符.制表符):b.读取字符直至再次遇 ...
- GPU计算的十大质疑—GPU计算再思考
http://blog.csdn.NET/babyfacer/article/details/6902985 原文链接:http://www.hpcwire.com/hpcwire/2011-06-0 ...