xmpp服务器 xmpp聊天软件

mqtt和xmpp哪个好

MQTT和XMPP各有优势,选择哪个更好取决于具体的应用场景和需求。

1. MQTT的特点与优势:

MQTT是一个轻量级的发布/订阅消息协议,主要用于机器对机器的通讯,常被用于机器通信如物联网的场景。其主要优势在于:

*低带宽占用:MQTT协议采用了二进制格式,使得消息传输更为紧凑,特别适合在带宽有限的环境中工作。

*高可靠性:MQTT协议支持QoS机制,确保消息能够可靠地从发布者传输到订阅者。

*支持双向通信:支持发布者模式,订阅者也可以向发布者发送消息进行通信反馈。在物联网场景下特别适用,如智能家居设备控制等。

2. XMPP的特点与优势:

XMPP是一种基于XML的开放协议,广泛应用于即时通讯领域。其特点包括:

*强大的扩展性:基于XML的特性使得XMPP协议具有强大的扩展能力,可以轻松地添加新的功能和特性。

*安全性高:支持端到端的加密通信,确保数据的安全性。同时提供了鉴权和隐私保护等功能。

*适用于实时通讯场景:支持即时消息传输,常用于在线聊天应用、游戏通讯等场景。同时也可用于服务端的命令和控制任务等场景。

因此,对于需要实时通讯和即时反馈的应用场景,如在线聊天应用或游戏通讯等,XMPP可能更为合适。而对于物联网和机器通信的场景,MQTT因其轻量级和可靠性等特点更为适合。具体选择哪个协议还需根据实际需求和应用场景进行决策。同时还需要考虑服务器端的实现复杂度、开发成本等因素进行综合评估。

xmpp 实现群功能,要怎么做

刚开始研究XEP-0045,感觉它应该能实现群的基本功能。

某个xmpp账号加入某个多人聊天(房间),如果房间不存在,服务器会临时创建,则此账号的岗位(affiliation)自动被为owner,便可以对房间进行配置(可以用pidgin感受一下,创建room后消息框里输入"/config"),比如设置群为永久群,设置主题(类似群名称)、设置为只允许成员加入、设置成员不能改变主题等,还可以添加删除成员(pidgin消息框中输入"/affiliate member abc@localhost",abc@localhost登录后加入此房间,便可发言、接收发言、查询成员列表等)

<img src="" data-rawwidth="1222" data-rawheight="1424" class="origin_image zh-lightbox-thumb" width="1222" data-original="">

这些功能理论上都应该能用程序实现,只是难易的问题,就看所用的xmpp客户端库对XEP-0045实现的如何。

我这里服务器使用的ejabberd,账号登录是通过外部服务认证,账号状态、消息都要通过外部服务记录(要写扩展,利用ejabberd的钩子和事件,现成的相关插件有ejabberd_auth_http、mod_http_offline、mod_muc_log_http、mod_post_log),ejabberd本身只是起到一个消息枢纽的作用,所以离线消息的存储,我不打算通过ejabberd本身实现,外部服务保存消息时若发现账号离线,可通过推送通知到客户端,客户端启动后可直接从外部服务获取。

我也刚才入门不久,不一定理解得全对,提供一些线索供参考。另外,我也在考虑mqtt是不是能满足需求。

如何自己搭建一个xmpp,实现推送消息

主要有三种方式:

1.客户端定时去服务端取或者保持一个长Socket,从本质讲这个不叫推送,这是去服务端拽数据。但是实现简单,主要缺点:耗电等。

2.Google的C2DM,具体不细说,缺点,服务器在国外,你懂得,不是很稳定。

3.XMPP协议,它是一种基于XML的传递协议,具有很强的灵活性和可扩展性。它的特点是将复杂性从客户端转移到了服务器端。

接下来说说XMPP在android客户端上的应用。分两部分:服务端搭建和客户端实现。

服务端搭建:

如果想测试一下功能,直接用搭建好的服务就行,下载androidpn-server-0.5.0-bin.zip。

点击bin目录下得run.bat,直接搭好服务,在浏览器上输入就进入管理界面。如下图:

客户端实现:

下载工程源码androidpn-client-0.5.0.zip(347.74 KB,下载次数: 25185),导入工程,运行前更改一处IP地址,修改androidpn.properties文件中的xmppHost为xmppHost=10.0.2.2

原因:模拟器访问本机需要改成10.0.2.2,下图为SDK中说明。

从服务端发送消息,客户端运行的界面:

阅读剩余
THE END