xmpp服务器,如何自己搭建一个xmpp,实现推送消息
大家好,如果您还对xmpp服务器不太了解,没有关系,今天就由本站为大家分享xmpp服务器的知识,包括如何自己搭建一个xmpp,实现推送消息的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!
ios socket和xmpp哪个好
socket是套接字,在你的语境下,多指传输层网络接口。
webSocket,是一个应用层协议,说的是,目前浏览器实现的一套通信协议,用来解决之前HTTP,请求响应模型不合适的场合。
XMPP,是一个应用层协议,协议基于XML结构设计。
其实websocket是socket的简约实现,与socket相比,可以节省额外的端口占用,直接使用一个公网域名访问。另外协议对报文的流量消耗做了优化。xmpp与websocket比也是比较臃肿的
xmpp是im的使用比较广泛的协议,早期的手机端推送为了省事就用的这种协议,但是后来发现这种协议比较臃肿耗流量,而且对服务器要求比较高
如何自己搭建一个xmpp,实现推送消息
主要有三种方式:
1.客户端定时去服务端取或者保持一个长Socket,从本质讲这个不叫推送,这是去服务端拽数据。但是实现简单,主要缺点:耗电等。
2.Google的C2DM,具体不细说,缺点,服务器在国外,你懂得,不是很稳定。
3.XMPP协议,它是一种基于XML的传递协议,具有很强的灵活性和可扩展性。它的特点是将复杂性从客户端转移到了服务器端。
接下来说说XMPP在android客户端上的应用。分两部分:服务端搭建和客户端实现。
服务端搭建:
如果想测试一下功能,直接用搭建好的服务就行,下载androidpn-server-0.5.0-bin.zip。
点击bin目录下得run.bat,直接搭好服务,在浏览器上输入http://127.0.0.1:7070就进入管理界面。如下图:
客户端实现:
下载工程源码androidpn-client-0.5.0.zip(347.74 KB,下载次数: 25185),导入工程,运行前更改一处IP地址,修改androidpn.properties文件中的xmppHost为xmppHost=10.0.2.2
原因:模拟器访问本机需要改成10.0.2.2,下图为SDK中说明。
从服务端发送消息,客户端运行的界面:
xmpp 实现群功能,要怎么做
刚开始研究XEP-0045,感觉它应该能实现群的基本功能。
某个xmpp账号加入某个多人聊天(房间),如果房间不存在,服务器会临时创建,则此账号的岗位(affiliation)自动被为owner,便可以对房间进行配置(可以用pidgin感受一下,创建room后消息框里输入"/config"),比如设置群为永久群,设置主题(类似群名称)、设置为只允许成员加入、设置成员不能改变主题等,还可以添加删除成员(pidgin消息框中输入"/affiliate member abc@localhost",abc@localhost登录后加入此房间,便可发言、接收发言、查询成员列表等)
<img src="https://pic4.zhimg.com/90be25b77f184e762d1af4b7ede9b717_b.jpg" data-rawwidth="1222" data-rawheight="1424" class="origin_image zh-lightbox-thumb" width="1222" data-original="https://pic4.zhimg.com/90be25b77f184e762d1af4b7ede9b717_r.jpg">
这些功能理论上都应该能用程序实现,只是难易的问题,就看所用的xmpp客户端库对XEP-0045实现的如何。
我这里服务器使用的ejabberd,账号登录是通过外部服务认证,账号状态、消息都要通过外部服务记录(要写扩展,利用ejabberd的钩子和事件,现成的相关插件有ejabberd_auth_http、mod_http_offline、mod_muc_log_http、mod_post_log),ejabberd本身只是起到一个消息枢纽的作用,所以离线消息的存储,我不打算通过ejabberd本身实现,外部服务保存消息时若发现账号离线,可通过推送通知到客户端,客户端启动后可直接从外部服务获取。
我也刚才入门不久,不一定理解得全对,提供一些线索供参考。另外,我也在考虑mqtt是不是能满足需求。
关于xmpp服务器,如何自己搭建一个xmpp,实现推送消息的介绍到此结束,希望对大家有所帮助。