南京企业自助建站,镇江高端网站定制,我想做互联网怎么做,网站设计文案 范例合肥程序员群#xff1a;49313181。 合肥实名程序员群#xff1a;128131462 (不愿透露姓名和信息者勿加入) Q Q:408365330 E-Mail:egojitqq.com 综述#xff1a; 之前小规模的IM一直通过百度云推实现模拟IM#xff0c;这种局限性比较多。公司很多的项目都需要IM集成…合肥程序员群49313181。 合肥实名程序员群128131462 (不愿透露姓名和信息者勿加入) Q Q:408365330 E-Mail:egojitqq.com 综述 之前小规模的IM一直通过百度云推实现模拟IM这种局限性比较多。公司很多的项目都需要IM集成所以最终想想还是自己搭建XMPP服务器来实现IM功能。这样可控性比较强。可以实现各种需求首先就有必要学习XMPP协议。了解XMPP基础协议的情况下才能更好的使用smack库已经自定义各种扩展。 XMPP简介 XMPP协议Extensible Messaging and PresenceProtocol可扩展消息处理现场协议 它是一种基于XML基础上实现的一种协议是聊天通讯的一个标准协议。Jabber最早实现XMPP协议的。首先我们知道XML格式扩展性比较强而且它又具有HTML这种穿透防火墙的功能所以不易被防火墙拦截因此在此基础上的XMPP协议当然也具有这些特性另外XML是和平台无关的实现多平台数据交换没有任何问题XMPP肯定也是如此。 XMPP协议特点 1.XMPP协议系统是一个分布式的系统每台服务器可以控制自己的系统资源另一方面它也可以实现系统间资源交换。XMPP服务器利用开放的XML协议来进行S2S(Serverto Server)通信就像在C2S(Client to Server)一样。相比之下大多数的IM系统使用了只是支持C2S/S2C通信的协议因此Jabber/XMPP服务器具有更大的灵活性。 2.XMPP协议是公开的非私密的很多程序是开放源代码。XMPP协议客户端和服务器端的交互要经由XML流。普通的聊天消息类型message改变用户登录状态(presence)传递消息内容或查询/更新(info/quey)应用是通过命名XML的命名空间(namespace)建立的。 3.状态(Presence)在整个聊天链接中都是维持存在的XMPP协议有在网络中维持存在和可用信息的能力。 4.XMPP允许建立并行的TCP套接字连接对所有连接上的客户端和服务器端。一旦建立连接会一直维持。因为链接一直保持着那么 设置、用户认证、用户登录状态查找功能都不用每次都重复执行。 5.Jabber/XMPP系统是模块化的Jabber/XMPP的设计注重如何实现可伸缩性、安全性以及扩展性。 XMPP协议的解析 在XMPP协议中一直存在着三个关键点和角色服务端网关以及客户端手机pc,平板……我们这里所讲的架构都是服务端/客户端模式而非客户端直连 1.消息解析 Jabber/XMPP系统通过XML流传输数据XML从客户端到服务端或者XML流从服务端到客户端。这种XML流有三个顶层XML标签元素message/presence/和iq/当然每个标签都包含子标签元素和属性下面将描述这些元素 一.消息标签元素message/: IM最基本的功能就是用户之间进行聊天消息发送这个元素就是承担着这种功能。每个message都有多个属性from属性和to属性就是其中两个顾名思义就是信息谁发的又是发给谁也就是发送人地址和接收人地址。消息还有type属性标志消息类型这些都有固定的类型当然消息也有固定的身份id属性这个id标志每一天消息这是唯一区分消息的。 二用户状态元素presence/: 用户登录后可以是在线的available隐身的Hide又或者是离线的unavailable。用户登录上线后服务器会把消息发送给用户如果用户不在线那么服务器会把消息存储起来这样可以实现离线消息。presence/元素包含show/和status/两个元素show/子元素是描述status的. Presence主要有两个用途: 1)告诉服务器所有客户端当前所处的状态2发出添加/删除好友请求. Presence.Type枚举值如下 available: 表示处于在线状态unavailable: 表示处于离线状态subscribe: 表示发出添加好友的申请subscribed:表示好友请求确认unsubscribe: 表示发出删除好友的申请unsubscribed: 表示拒绝添加对方为好友error: 表示presence信息报中包含了一个错误消息。 三消息/查询元素iq/ Jabber/XMPP协议的最后一个订层元素就是iq/元素。Info/Query的缩写就是iq 顾名思义就是信息/查询通过这个元素可以获取各个端之间的消息它是请求响应的也就是查询反馈模式。每个iq的目的都是不同的它们通过命名空间namespace来区分。iq也有from type id 三个属性type属性和http协议差不多有get 和post值.每一个IQ-get 或IQ-set 节均必须接收响应的IQ-result 或IQ-error 节。通过这种查询/反馈结果的方式客户端和服务器通信 转载于:https://www.cnblogs.com/egojit/p/4874318.html