xmpp在企业通信的应用

XMPP(Extensible Messaging and Presence Protocol)是一种开放的即时通讯协议,广泛应用于企业内部通信系统。本文将探讨XMPP如何提供实时、可靠的聊天、群组协作和文件传输功能,同时分析其在安全性、可扩展性和集成性方面的优势,为企业通信带来高效解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >




一、我们为什么要开发xmpp协议

    xmpp是网络上IM通信协议,在我们介绍xmpp的时候,我们可能想到的问题就是QQ,facebook等国内外的大型im系统,甚至很多人在疑惑,有了它们,难道我们还需要其他的im系统吗?其实,qq不能解决的问题,或者qq解决的代价较大的问题,才是有必要分析的。
    我们知道,企业的核心是营销和管理,而其中即使通信系统是营销和管理中最重要(没有之一)的沟通工具,而淘宝之类掌控着小微企业的资金往来(财务核心的现金流),baidu掌控着咨询信息,它们三家在中国的地位,是几乎没法撼动的,类似京东的搅局者,其实核心是企业将实物与信息的更紧密的结合,外部的企业集团,在信息的分布,沟通的方式,甚至现金流方面,当您还是小微企业的时候,淘宝和qq几乎能完全满足您的业务需要,内部沟通建立不同的群,客户沟通建立不同的群,群主熟悉群内的所有成员,然后产品通过淘宝销售,一切都很美好,但企业一旦上了规模,则在自己的系统建设方面,完全依赖外部的互联网络,就不太容易了,下面我分析的业务模式说明
    1、qq群难管理上百人以上的团队,对一家企业超过500人以上使用电脑进行管理,就知道qq群的弊端了,首先,因为qq是面对intenet的,万一有竞争对手加入您的组织群,那么您企业的信息将会曝光,而超过100人的团队,就可能面对这样的风险,而采用intranet的xmpp及时通信系统,就可以避免这样的问题,让内部群的信息更加安全,很多人说可以采用好的管理制度之类,但是,在广场中存放东西肯定不如您家里的仓库保险。
    2、更重要的是,管理方面,qq对某些信息的管理不能完全满足您业务扩展的需要,比如xmpp中有一个公众号的概念,您可能将用户的普通需求整理成自动化的答案存放在数据库中,而qq能否提供给您这些相关的存储技术呢?
    3、qq可能提供给您相关的二次开发接口,甚至可以给您提供相关的开发技术支持(如果您公司更牛的化,如京东,就可能是qq的战略伙伴),但是,qq毕竟是一个大型通信企业,很多流程和协作下来,很可能耽误您的进度,求人不如求己。
    4、从外部系统来说,大中型企业所要解决的重大问题是售后和销售,售后:而如果使用手机apk或者ios,则售后人员更加能快速响应用户的需求,如果使用qq系统,需要加好友等复杂的操作模式,如果采用自己设计的xmpp系统,则扫描产品的编号或者条形码做验证,则就可以直接享受到优秀的售后服务,并且能对售后的业绩进行良好的评估。对销售也一样,基于xmpp的im系统对销售人员来说,更是沟通情感,做号产品宣传的好东东。
    5、从内部系统来说,大中型企业的业务复杂,管理模式并不是一个简单的qq聊天工具可以解决的,而基于xmpp的im系统,可以更有效的安全的控制内部人员的沟通,另外,xmpp系统可以很有效的与人力资源的授权结合起来,可以方便的开离线会议。
    6、xmpp系统是其他业务系统的基础,在及时通信和公众服务提供的平台上,无论采购,财务,人力资源,办公等等,都能在这个平台上扩展自己的业务。


二、xmpp的功能界定:


    我们上面谈论了xmpp的强大的业务功能和对企业的重要型,那么我们将如何界定xmpp的功能呢?如何搭建属于企业自己的xmpp系统,附近众的代码是网络上下载下来的一个demo,涉及到保密及其他原因,我不能公开某些公司的代码,但是我可以简单介绍其设计思想。
    我们说了那么就,也常用qq,微信,那么到底xmpp有什么样的功能呢?xmpp是一个什么样的协议呢?开发人员开发xmpp提供给其他开发人员什么样的接口比较合理呢?xmpp如何架设?
    本节回答前2个问题,后面2个问题分别在3,4节介绍,做技术上的介绍。
     1、xmpp是一个类似于ftp服务的协议,是一个网络通信协议,这个协议管理的通信信息是用户与用户,用户与机器之间的及时通信数据,另外,与一般的http协议,ftp协议不一样的是,xmpp存取了大量的数据,而这些数据是xmpp系统内的数据(被xmpp系统管理,少数如文档,图片,音乐资源等来源于外部协议,后面介绍),而ftp或者http协议的数据几乎与协议无关(通信协议,说白了就是管理数据传输的东东)。
      2、xmpp中规定了及时通信的single chat room (单聊室), multi chat room(多聊室), pub sub(公众服务室)等用户数据,也管理用户的在线状态数据,另外也管理roster(通信录)信息等数据库相关功能。分为客户端和服务器两部分,具备安全认证,安全登录,通信加密等功能,服务器端根据协议的需要,管理通信录数据,公众服务室,聊天记录等信息(功能)。
      3、xmpp协议本身是基于xml的方式进行的,后续很多系统改良为json模式,这样更简单通信流量少。     
      4、xmpp其中最著名的实现asmack,是jivesoftware公司开发的软件,几乎所有大型公司都基于该开源包而开发,其中如果是简单的im通信协议采用了android pn开发,而android pn本身的实现相对较弱,但一般简易的实现采用该模式尚可,开发周期短一些(选择什么样的支撑库,好的平台是一切的基础)。      5、xmpp是一个及时开发协议,而其在语音处理,图片传输等功能上,需要其他的协议进行 配合,所以在进行xmpp开发的时候,需要做服务器的重新部署,包括图片存储,文件名管理等功能(本身功能有限,需要其他做支撑,设计的时候需要考虑)。
      6、无论多好的平台,对适应具体的业务系统,将按照业务处理的方式进行部署,而xmpp一样,这些部署包括下面章节的开发接口程序的二次开发,公众服务号的规划和实现,用户具体信息的实现接口,具体的消息系统划分等(架构设计)。
    

三 、基于xmpp的接口开发
     系统不一样,可能开发实现xmpp的协议也不一样,业务的架构设计这里不能一概而论,这里就不做描述,我们要知道的是系统的常用接口,即可能对外输出的接口,和内部实现的常用功能,系统在架构的时候可以增加和删除这些接口,以适应业务系统,一般的用户系统,使用mvc的模式开发,而接口系统,我将mvc修改为mic,其中model是数据模型,这个是不能少的,在传统的系统设计中,该部分叫数据结构,在面向对象的设计当中,该部分叫model,除了数据结构外,还管理数据的基本操作,而control就是算法部分,原来的view是用户界面,是输出部分,而xmpp通信协议面向的是业务系统的程序员或者是im系统的用户界面程序员(他们实现具体的view),接口系统是让其他人员开发更加简单,是平台化的基础部件。    1、jivesoftware公司的asmack
    选择jivesoftware公司的asmack作为架构的基础,再其上实现接口(二次开发平台),简单介绍该软件的类:

    
    //异常处理
     import org.jivesoftware.smack.XMPPException; 
     // 聊天室管理
     import org.jivesoftware.smack.Chat;
     import org.jivesoftware.smack.ChatManager;

     //搜用户信息数据model   
     import org.jivesoftware.smackx.Form;
     import org.jivesoftware.smackx.ReportedData;
     import org.jivesoftware.smackx.ReportedData.Row;

     //通信录
     import org.jivesoftware.smack.Roster;
     import org.jivesoftware.smack.RosterEntry;
     import org.jivesoftware.smack.RosterGroup;
     import org.jivesoftware.smack.RosterListener;

     //监听,是从服务器接受数据
     import org.jivesoftware.smack.MessageListener;  //数据为用户聊天信息的监听
     import org.jivesoftware.smack.PacketListener;  //所有数据的监听
     import org.jivesoftware.smack.ChatManagerListener;   //聊天室管理监听

     import org.jivesoftware.smack.XMPPConnection;  //连接管理,管理监听,发送,登录,授权等
     import org.jivesoftware.smack.SmackConfiguration;//配置操作,含服务器的处理
     import org.jivesoftware.smack.ConnectionConfiguration; //连接操作配置

     import org.jivesoftware.smack.filter.PacketFilter; //下面室接收的包的filter管理,方便用户对接收的数据进行分类dispatch
     import org.jivesoftware.smack.filter.AndFilter;
     import org.jivesoftware.smack.filter.PacketFilter;
     import org.jivesoftware.smack.filter.PacketIDFilter;
     import org.jivesoftware.smack.filter.PacketTypeFilter;

     import org.jivesoftware.smack.packet.IQ;  //传输的数据 model,iq为通信提供请求与响应机制
     import org.jivesoftware.smack.packet.Presence;//在线状态
     import org.jivesoftware.smack.packet.Registration; //注册
     import org.jivesoftware.smack.packet.Message; //消息
     import org.jivesoftware.smack.packet.Packet;  //包

     import org.jivesoftware.smack.PacketCollector;//搜藏管理
     import org.jivesoftware.smackx.packet.ChatStateExtension; //聊天室的状态
     import org.jivesoftware.smackx.packet.LastActivity; //最后的iq请求
     import org.jivesoftware.smackx.packet.OfflineMessageInfo;//离线消息
     import org.jivesoftware.smackx.packet.OfflineMessageRequest;//离线消息请求
     import org.jivesoftware.smackx.packet.SharedGroupsInfo;//共享组信息,或者叫公共服务


     import org.jivesoftware.smackx.GroupChatInvitation;//组信息
     import org.jivesoftware.smackx.PrivateDataManager; //私有数据管理
     import org.jivesoftware.smackx.bytestreams.socks5.provider.BytestreamsProvider;//数据流管理

     import org.jivesoftware.smackx.search.UserSearch;  //用户搜寻
     import org.jivesoftware.smackx.search.UserSearchManager;//用户搜寻处理

     //有关model信息,如名片管理等
     import org.jivesoftware.smack.provider.PrivacyProvider;
     import org.jivesoftware.smack.provider.ProviderManager;
     import org.jivesoftware.smackx.provider.AdHocCommandDataProvider;
     import org.jivesoftware.smackx.provider.DataFormProvider;
     import org.jivesoftware.smackx.provider.DelayInformationProvider;
     import org.jivesoftware.smackx.provider.DiscoverInfoProvider;
     import org.jivesoftware.smackx.provider.DiscoverItemsProvider;
     import org.jivesoftware.smackx.provider.MUCAdminProvider;
     import org.jivesoftware.smackx.provider.MUCOwnerProvider;
     import org.jivesoftware.smackx.provider.MUCUserProvider;
     import org.jivesoftware.smackx.provider.MessageEventProvider;
     import org.jivesoftware.smackx.provider.MultipleAddressesProvider;
     import org.jivesoftware.smackx.provider.RosterExchangeProvider;
     import org.jivesoftware.smackx.provider.StreamInitiationProvider;
     import org.jivesoftware.smackx.provider.VCardProvider;
     import org.jivesoftware.smackx.provider.XHTMLExtensionProvider;

2、附件的软件介绍:

   附件的软件介绍:
         com.sys.android.xmppmanager
                 xmppconnection.java 这是xmpp的核心层,建立与服务器的连接,配置系统信息
                 xmppservice.java 实现了好友管理,用户群组管理,用户管理
        com.sys.android.db                 存储用户聊天信息的数据表操作
         com.sys.android.entity:数据model
                 ChatMsg.java :聊天信
                 FriendInfo.java:好友信息
                 GroupInfo.java:组信息
          com.sys.android.activity  用户操作界面
                  ChatActivity.java:聊天列表界面
                  FriendAddActivity.java:加好友操作界面
                  FriendListActivity.java: 好友列表信息
                  LoginActivity.java:登录界面
                  RegisterActivity.java:注册界面
                  WelcomeActivity.java: 版权信息
           com.sys.android.util   util操作
                   DialogFactory.java  对话框
                   MyToast.java 提示信息
                   TimeRender.java 时间信息
                   TransferUtils.java
                   Utils.java 屏幕信息
    这个软件是简单的聊天操作处理程序,这个系统的劣势或者说系统需要扩展的地方:
         1)、系统将ui和xmpp的服务一起处理,这样,只有本系统或者本activity 才能收发信息,外部业务不能访问
         2)、没有管理用户的详细信息,在企业应用里边,这块需要重新优化并优化设计,让好友列表与企业用户结合,这是企业xmpp与普通xmpp的区别。
         3)、没有管理公众服务号,xmpp提供了相关功能,需要做接口
         4)、没有好好利用 xmpp 的 filter功能,这样,消息的分流方面也处理不好,这样对业务细化方面存在问题。

3、xmpp 的常用封装接口:      我们可以改良上面的系统,让xmpp层次划分更加清晰,要将数据层和界面实现层分开,比如将通信的专业功能进行封装,定义给其他程序员用户新的简单的调用接口,实现这些简单接口到asmack的实现功能,定义后续ui的开发。虽然不同的公司可能业务不一样,但是按照这样的层次划分的系统,可以提供较号的参考实现:

         1)、用户界面实现:建立xmpp的的数据连接,并登记packlisten和presencelisten等接收操作接口.完成登录或者注册等相关操作接口。
         2)、调用系统(提供给聊天ui处理或者其他业务部分处理):
                发送操作接口:
                   co_action---常用的处理接口如数据发送,
                   co_authenticationaction---处理用户的授权接口,
                   co_contactaction---处理用户的联系人操作接口,
                   co_pubsubaction---处理公众服务号的操作接口,
                   co_roomchataction---处理聊天室gid的操作接口,
                   co_userchataction---用户信息
                接收操作接口(从packlistener传来的消息,通过filter处理后的消息):
                    pubsubmessagelistener---公众服务号
                    roommessagelistener---聊天室信息登记
                    usermessagelistener---用户信息
                    co_listenermanager---处理来的消息,继续分包为图片,信息,语音等信息。
                    co_statuslistener---心跳包
        3)、实现上述接口的相关实现类
             系统的输出接口室asmack函数,而输出函数就是发送包或者接收包,中间的处理流程包括:
  • model的重新管理,如重新封装完毕的用户名(Roster)和名片管理处理功能,让xmpp服务器可以管理除用户名之外的员工信息或者客户信息。
  • packet的结构重新定义,调用asmack的 listener 和 filter,结合重新定义的packet结构能够分包到不同的listener处理不同的消息
  • 内部定义协议的参数,比如授权,加密算法等
  • 管理公众服务信息,提供相关数据库供用户查询公共服务信息
        4)、后续开发实现:
         xmpp建立了与服务器的常连接,并且上面函数接口也提供了心跳包等管理用户的状态,能够通过xmppconection提供收发等操作接口,后续的xmpp需要实现的功能是ui实现,比如如何存储用户聊天信息,如何操作聊天(单聊,多聊,公共服务号)等实现界面,如何实现好友管理等界面操作,如何实现离线或者加好友等界面等操作,另外,外部的其他业务系统可以通过调用该连接,而扩展自己的业务系统(调用收发消息)。
       
四、xmpp如何架设
      提供一个apkbus的网址:http://www.apkbus.com/android-18168-1-1.html
        这是服务器的安装和客户端的测试,通过它可以简单的部署下服务器,复杂的系统需要架构设计重新部署,如用户通信录管理,文件的上传和下载,这些需要结合企业的业务和xmpp的服务器结合进行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值