APP下载

跨平台企业即时通讯系统的设计和实现

2019-06-28杨继鹏张广建

关键词:即时通讯好友通讯

杨继鹏,张广建



跨平台企业即时通讯系统的设计和实现

杨继鹏1,张广建2

1. 山东服装职业学院信息工程系, 山东 泰安 271000 2. 北京新桃科技有限公司, 北京 100000

即时通信软件(IM)已经成为人们生活中必不可少的交流与沟通工具。但是,个人IM用于企业中还有很多不足之处,需要加以补充、扩展。针对企业的实际需求,从系统基本架构、企业通讯录、多系统协作、办公自动化等几个方面,对即时通讯系统进行了完善和加强,形成了更适合企业使用的即时通讯系统。另外,个人在移动设备上使用IM的时间越来越长,而很多企业用户选择在电脑上使用IM,本系统支持Windows、Android、iOS和Html5,是真正跨平台的企业即时通讯系统。

即时通讯系统; 企业通讯录; 办公自动化; 设计

即时通讯(IM)不但拥有几亿级别的个人用户,还有数量庞大的企业用户。很多企业用户只能使用个人即时通讯软件(如微信),但是遇到了很多问题。例如管理问题,在微信群中,企业成员可以邀请企业外用户,造成企业信息泄露,伪造身份攻击等。再例如,和企业其它系统的协作,在微信里也无法实现。为了解决类似的一些问题,需要为企业设计和实现专用的即时通讯系统。

1 即时通讯系统的基本架构

即时通讯系统采用C/S和B/S模式并用的系统架构。具体来说,Android和iOS手机客户端,以及PC客户端都采用C/S模式。但对于不愿下载客户端的用户,系统也提供了支持B/S模式的Html5客户端。

客户端之间的通讯支持C/S模式和P2P模式。客户端之间一般无法直接连接,需要通过服务器转发才能进行通讯,即C/S模式。如果客户端能够直接连接,系统自动采用P2P通讯直接连接、通讯。通讯形式的转变对于用户是透明的。

C/S模式能够对数据交换进行有效监控,系统的安全性较高,并且可以完成信息认证、处理、存储以及对用户资料的集中管理,另外还能够实现离线消息暂存等功能,但是随着用户数量不断增加,服务器的压力会增大,性能减弱。P2P模式可以最大程度地利用网络带宽,减轻服务器负担,提高用户响应速度,增强用户的服务体验,占用带宽较多的视频传输、音频传输、文件传输等应用程序使用该模式。但是P2P模式的开发较C/S应用程序更为复杂。综合考虑,系统使用C/S和P2P的混合模式,充分利用这两种模式各自的优势,提升系统性能。

1.1 客户端和客户端通讯的基本模型

客户端Client A和客户端Client B实现通讯,这是即时通讯最简单的模型,如图1所示。

图 1 客户端和客户端单服务器通讯模型

在这个模型中,客户端Client A和客户端Client B都连接到服务器Server。客户端Client A把数据发送到服务器Server,服务器Server再把数据转发到客户端Client B,从而完成一次数据通讯。同样客户端Client B也可以通过这种方式向客户端Client A发送数据。

客户端Client A和客户端Client B之间也可以创建一条数据传输通道。当客户端Client A和客户端Client B能够互相连接时,可以在两者之间直接传输数据,而不需要服务器Server进行转发。这样可以减轻服务器Server的负担,降低整个系统成本。所以早期的IM都努力实现客户端Client A和客户端Client B的直接通讯,甚至由服务器Server协助建立连接。但随着硬件价格和带宽价格的下降,以及服务器数据价值的上升,IM系统逐渐减少了客户端的直接连接,越来越倾向于由服务器转发数据了。

除了转发数据,服务器还需要实现很多辅助功能,例如账号的注册和验证,好友关系的存储和下发,用户信息、状态的修改和查询等。

根据基本的通讯模型, 我们来分析用户交互过程中需要经历的步骤,以下是Client进行点对点通讯的详细过程:

(1)ClientA通过即时通信客户端输入自己的账号和密码登录服务器Server,服务器读取Client A注册过的数据库来验证其身份。如果用户身份验证通过,就登记Client A的相关信息(如用户IP地址及使用的TCP/UDP端口号等),并返回Client A登录成功的标志,且将Client A在系统中的状态改为在线状态。

(2)根据Client A存储在服务器Server上的好友列表,服务器将Client A的在线信息(包括Client A的IP 地址及使用的TCP/UDP端口号、在线状态等)发送给同时在线的好友Client B,Client B客户端收到此信息后显示给用户。Client A的在线信息同样还发送给同时在线的好友Client D等。

(3)服务器Server把Client A存储在服务器上的好友列表及其相关信息回送到Client A。这些信息也包括好友的IP 地址、端口号以及其在线状态等。这时Client A就获得了其好友列表及其在线状态等相关情况。

(4)如果Client A想与其在线好友Client B进行聊天,他可以尝试直接向Client B发出聊天信息,Client B接收到Client A的消息后,自动回复数据已经收到。

(5)有些情况下Client A和Client B无法直接通讯,Client A只能把聊天数据发送到服务器Server,由服务器转发给Client B。

1.2 海量客户端和多服务器需要的可扩充性架构

单服务器支持的客户端是有限的,我们假设能支持2000人同时在线、通讯。当客户端数量超过单服务器支持能力以后,就必须把客户端分到多个服务器上,例如Server A、Server B。

但是多服务器带来了另一个问题。当客户端Client A和客户端Client B通讯的时候,客户端Client A把数据发送给Server A,希望Server A转发给客户端Client B。但客户端Client B是连接到Server B的,并没有连接Server A,所以Server A无法找到客户端Client B。

为了解决这个问题,需要增加另一类服务器,让服务器Server A能够发现服务器Server B。我们把原来的服务器Server A和服务器Server B称为在线服务器Online Server,把用于联系Online Server的服务器称为Information Server。Information Server也包括多个服务器,采用分布式部署,实现服务器的弹性配置。最后为了实现Information Server之间的互相通讯,我们又添加了服务器Root Information Server。Root Information Server需要处理的通讯量比较小,只有一台服务器,类似于DNS系统的根服务器。

所以服务器Server的转发功能由若干Online Server和若干Information Server分布式实现。我们把服务器Server的账号功能独立出来,由账号服务器Account Server实现。把好友关系独立出来,放到Information Server实现。而添加好友和好友确认的功能,像数据通讯一样,通过Online Server和若干Information Server转发。

此时的网络通讯模型如图2所示,图中用ISA-ISZ代指若干Information Server,OSA-OSX代指若干Online Server。

图2 海量客户端和多服务器的网络通讯模型

图2仅做示意。实际应用中,客户端、Online Server、Information Server的数量都是弹性配置的,是根据客户端规模确定的。Online Server和客户端是一对多的关系,Information Server和Online Server也是一对多的关系。

Account Server和Root Information Server目前都只有一台服务器。

需要特别说明的是,以上服务器都是逻辑概念,是软件概念。理论上,若干不同的逻辑服务器在硬件上可能运行在同一台机器上。

1.3 满足用户复杂通讯需求的专用服务器

即时通讯系统是在不断发展的。最初的即时通讯比较原始,甚至不会保存好友列表。但是随着即时通讯系统的进步,用户的需求也越来越复杂。

例如,用户在添加好友的时候,除了按照账号查找好友,还需要能按照性别、年龄、地域、爱好等条件进行查找。这些信息分布于若干Information Server中,如果一一查询,时间太长无法接受。我们在系统中添加搜索服务器Search Server,把存放在Information Server的用户信息集中起来,供用户搜索使用。搜索服务器Search Server在个人IM系统中,可以用来搜索、添加好友。而在企业IM系统中,功能相对简单,主要用于搜索用户信息。因为当用户规模比较大的时候,如果把所有用户信息存储在客户端并实时维护,会大大加重系统的负担。企业IM的Search Server可以更加方便地找到相应的用户。

例如,用户不但需要一对一通讯,还需要多对多通讯,即群聊。而群聊的基础功能就需要实现创建、解散、添加成员、删除成员、退出等,用户可能还需要权限管理、聊天内容管理等复杂功能。为此我们在系统中添加群聊服务器Team Server,把所有的群聊功能在Team Server中实现。

例如,用户收发文字内容的时候,如果两名用户没有同时在线,可以把文字消息存在Information Server中,等目标用户上线以后,再从Information Server接收。但是,用户还需要发送图片、音频、文件等,Information Server负担加重,会造成阻塞,降低用户体验。另外,某个文件的多次转发,会在不同的Information Server上存储多份,造成浪费。为了解决这些问题,在系统中添加File Server,专门处理文件的上传、存储和下载,同一份文件不管转发多少次,只需在服务器存储一份即可。

例如,附近的人功能,需要获取用户的地理位置,并按照用户的地理位置排序、查找、分类。这个需求在Information Server上和Search Server上实现都存在一定困难。我们在系统中添加Location Server,专门对用户按照地理位置进行处理。

类似种种需求,都需要在原有基础上添加专用服务器,针对性解决用户的复杂需求。

2 企业即时通讯系统的完善和加强

我们把常见的面向个人使用的即时通讯系统称为个人IM。现实中有很多个人IM用于企业通讯的案例。如本文前面所述,个人IM用在企业中,出现了很多问题。为了解决这些问题,我们在系统中添加了若干服务器,统称为企业服务器。企业服务器主要包括以下几个常见功能。

2.1 企业通讯录

企业通讯录支持服务器设置所有用户账号、用户部门、用户的好友列表等功能。我们把处理企业通讯录的服务器称为Contact Server,如图3所示。

图3 处理企业通讯录的服务器

企业通讯录主要针对用户身份认证、用户分组和好友查找问题。由于用户身份都是由服务端设置的,自然解决了用户的身份认证问题,把用户严格限制在企业内部。

企业用户属于不同部门,用户可以按照部门分组,在部门内部开展群聊,把线下的部门讨论搬到线上,不受时间、空间的约束。

企业通讯录可以为用户设置好友列表,这个列表取决于具体情况。例如,开发部成员的好友列表是本部门成员,销售部成员的好友是销售部和市场部成员,总裁办公室的好友列表包括办公室成员和各部门管理人员。如图4为系统的企业用户信息管理界面。

图4 企业用户信息管理

企业通讯录的最大优势,在于企业成员和系统用户的严格同步。当企业成员入职时,同步加入系统用户,加入好友列表,加入部门分组。当企业成员离职时,同步在用户集合、好友列表和部门分组中删除。当企业成员跨部门调动时,也能同步修改用户分组等数据。

如果没有企业通讯录,个人IM往往无法及时处理企业成员的变化。企业成员加入时,要求每个成员在IM中添加一个好友需要一定的管理成本。而当企业成员离职时,原同事通常仍然把他留在好友系统中,群聊也经常碍于情面不方便删除。甚至有些成员存在于多个群聊中,忘删、漏删的情况司空见惯。

2.2 企业子系统互通

企业即时通讯系统只是企业若干子系统的一个。企业子系统的互相协作、互相调用非常重要,企业即时通讯系统也不例外。

子系统互通最常见的用户需求是用户账号互通。例如,企业已经部署人力资源子系统,当实现企业即时通讯系统的时候,希望使用人力资源子系统(HR)的用户账号。IM客户端首先输入HR内的用户账号HR Account,然后到HR Server验证账号是否正确,如果正确则返回该用户在IM内的用户账号。客户端再用IM系统内的账号登录Account Server,进入IM子系统。图5为以人力资源子系统为主的企业子系统互通示意图。

上述系统架构是以人力资源子系统为主。我们也支持以企业即时通讯系统为主,采取如下系统架构。企业即时通讯系统的客户端和服务器保持不变,HR客户端Client登录的时候,先到企业即时通讯系统的服务器端根据用户账号获取一个Token,然后使用此Token登录HR服务端Server。HR服务端Server接收到Token以后,需要去Account Server验证Token的合法性。微信登录采用的OAuth2协议,也是类似架构。图6为以企业即时通讯系统为主的企业子系统互通示意图。

图5 以人力资源子系统为主的企业子系统互通示意图

图6 以企业即时通讯系统为主的企业子系统互通示意图

在账号统一的前提下,企业即时通讯系统和其它子系统之间可以互相协作、互相调用。例如,人力资源子系统原来需要发送邮件通知,可以改为发送即时消息,更加灵活、方便。

2.3 在企业即时通讯系统上创建应用

企业即时通讯系统的发展趋势是在系统基础上创建更多的应用,例如考勤、公告、审批等,从而成为办公自动化的基础平台。由于企业即时通讯系统已经具备用户管理、网络通讯、分组权限等基础功能,在其基础上创建应用,可以说是事半功倍。

具体方法是,企业即时通讯系统发送、接收的每条数据,都可以添加应用属性,标识这条数据对应的应用模块。

当用户A使用审批应用时,输入审批内容,形成审批数据。这条审批数据就像普通的文字数据一样,从用户A发向用户B。用户B收到审批数据以后,根据数据中包含的应用属性,判断该数据对应的应用模块,再把该数据分发到审批应用,如图7所示。

图7 企业即时通讯系统上创建应用示意图

这种架构有效地保证了应用的扩展性。底层的数据传送功能只负责应用数据的发送和接收,不参与应用数据的创建和解析,从而保证了底层数据传送功能的抽象性。

3 跨平台实现及其遇到的问题

即时通讯系统最初运行在PC机上,随着智能手机的迅速发展,即时通讯系统逐渐普及了手机客户端。我们的企业即时通讯系统是真正跨平台的即时通讯系统,也就是说,在多个平台上都实现了最佳的客户端形式。系统使用同一后台服务端,客户端在PC机和Android、iOS手机上都做了独立、完整的设计和实现,用户可以自由选择使用PC客户端、手机客户端,或者使用网页形式访问。相对其它一些企业即时通讯系统,只实现了部分平台的客户端,或者在某些平台上只实现了部分功能,该系统更加完善,更加方便。

3.1 服务端及数据库的设计和实现

服务器采用MySQL数据库存储数据,使用Java编程实现,可以在Windows平台和Linux平台。如上文所述,服务端包括Account Server、Online Server、Information Server和Contact Server等等,这些服务器基本使用Java实现,没有运行界面。为了进行企业信息的管理,例如企业人员的增加、删除、修改和查询,Contact Server提供了Html5界面,原因是Contact Server的主要用户是企业管理人员,主要应用场景是在企业内部办公时使用。

服务端数据库主要采用My SQL数据库。系统设计的主要数据库表有权限信息表(Privilege Info)、部门信息表(Department Info)、职务信息表(Job Info)、用户信息表(User Info)、个人聊天记录表(Chat Record Info)、群组信息表(Group Info)、群聊天记录表(Group Chat Record Info)等。

数据库包括以下核心实体和属性:

用户资料(用户ID、名称、ICON、性别、年龄、在线状态、IP、Email)、朋友关系表(用户ID、朋友ID、添加好友日期)、聊天群资料(群ID、群用户ID、群主ID、群创建日期、用户权限)、文件信息(发送者ID、接受者ID、发送日期、文件类型)。

服务端和客户端之间的通讯数据采用json格式。早期IM在大多数采用xml格式,但近期json格式用的比较多,对手机客户端支持得也更好。

3.2 Windows PC客户端

虽然手机端即时通讯发展迅速,使用方便,但还有大量场景是在PC机上使用即时通讯,企业用户尤其如此。我们的企业即时通讯系统支持Windows客户端,采用VC实现。Windows客户端的功能类似QQ,能够实现一对一或多对多的文字、图片、文件传输。Windows客户端的优势是硬件性能强大,网络连接稳定。缺点是由于PC机硬件的限制,Windows客户端的语音功能相对短板。

图8 手机客户端界面示意

3.3 Android、iOS手机客户端

用户已经养成了在智能手机上随时随地使用即时通讯系统的习惯。企业即时通讯系统支持Android和iOS手机客户端。Android客户端采用Java语言实现,iOS客户端采用Objective C实现。

智能手机目前都有完善的摄像头和话筒,所以图片和语音功能比PC客户端强大。此外,手机客户端还拥有GPS定位功能,可以实现打卡、签到等基于位置的服务(LBS)。手机客户端界面设计与微信等已有移动IM类似,如图8所示。

手机客户端的缺点是网络连接不够稳定。一方面,有时手机无法连接WiFi,而移动网络既要花费资金,又有盲区。另一方面,即使手机连接网络良好,当用户从即时通讯系统切换到别的软件,或者长时间闲置,手机都会切断即时通讯系统的网络连接,所以手机客户端经常处于离线状态,用户在线状态失去了意义,因此,在手机客户端中,不再标注用户在线状态。

相比直接打电话,移动端即时通讯系统有很多优点,可以和电话形成良好的互补。第一是异步进行,减少了对接收方的干扰。例如接收方正在开会,无法接打电话,但可以接收IM信息。第二是IM可以发送图片、视频、文件等,而且可以永久回听语音,这些都是电话无法做到的。对于移动端经常离线造成的问题,系统通过消息推送机制来解决。

消息推送机制是为了保证数据通讯的实时性。当用户A给用户B发送实时消息时,首先把消息发送到服务端。然后服务端会检查用户B的手机客户端是否在线。如果该用户手机客户端在线,服务器会把消息直接发到该用户客户端,用户B就可以实时接收到消息。如果该用户手机客户端处于离线状态(例如App切换到后台),服务端会调用推送功能,把消息推送到用户B的手机上。用户B能够在手机上看到服务端实时推送过来的消息,如果是自己关心的消息,可以选择打开App进一步查看详细内容。

在iOS手机上,推送系统由Apple公司实现。在Android手机上,推送系统的实现有很多种,一般手机厂商如华为、小米、OPPO都有自己的推送系统。我们的Android客户端兼容常见的手机品牌和机型。

由于iOS系统的安全限制,iOS客户端发送文件的选择范围比较窄,只能发送以前接收过的文件,或其它App允许打开的文件。

3.4 Html5网页

Html5网页又称H5网页,通常运行在手机浏览器中,也可以运行在Windows的一些浏览器中。Html5网页的优势是无需下载、安装,即开即用,自动升级。但Html5网页也有很多缺点,例如保持网络连接、调用硬件设备能力比较差,界面反应速度不如原生App(见3.2所述)等。H5网页端的应用场景,一般是习惯使用PC客户端的用户,临时在手机上使用,或者在陌生PC上短暂使用系统、不方便安装客户端的情况。

我们的企业即时通讯系统支持以上所有客户端形式,用户可以自由选择,也方便跟其它企业子系统灵活适配。

4 本系统的特点和创新

本系统在设计和实践过程中,参考了多款同类型软件系统,吸收了很多用户的经验和意见,保证了本系统的各方面优势。例如参考文献[3]中的企业即时通讯系统甚至没有移动端,参考文献[4]中,大蚂蚁Big Ant在移动端舍弃了企业通讯录功能。

4.1 可扩充性

系统在用户规模方面提供了可扩充性。如果用户数量增加,只需要增加服务器的数量,不需要修改服务器的架构。这种可扩充性的架构,有效保证了系统的稳定性。

系统在应用种类方面提供了可扩充性。如果应用类型增加,只需相应增加某个应用,不需要修改整体的架构。从技术角度上讲,企业即时通讯系统可以成为企业信息系统、企业信息化的新平台。

4.2 跨平台

系统支持Windows客户端、Android和iOS手机客户端、H5网页等多种操作形式。它们互有优缺点,互相补充,既能让用户随时随地方便使用,又能给用户提供反应迅速、形式多样的用户体验。

4.3 加强系统协作

系统支持两种协作方式。

一种是在原有企业子系统(以HR系统为例)的基础上,增加企业即时通讯子系统。系统既支持在原HR系统上增加企业即时通讯系统属性,也支持把原HR系统的账号体系导入企业即时通讯系统。

第二种协作方式是把企业即时通讯系统作为用户认证中心,采用OAuth2协议等方式为其它子系统提供用户账号认证、用户信息维护等。

4.4 定制系统应用

系统可以作为企业信息化的基础系统,提供用户体系和通讯功能。在此基础上可以创建各类应用,如考勤打卡、公文审批、人事管理等等,从而搭建整个办公自动化系统。这些应用的数据发送和接收只需要遵守一定的格式,就可以直接添加到系统中,使用原来的系统传输通道,从而大大节省开发时间和成本。

5 展望

企业即时通讯系统近年来逐渐普及,目前正向增强功能、改善体验、加强协作方向发展。我们这个系统的发展方向主要是加强系统协作和定制应用,尤其是加强系统协作。对于企业应用中的软件,制定相应接口,实现互相调用,是今后的工作重点。

[1] 刘琰.Windows网络编程[M].北京:机械工业出版社,2014

[2] 刘云.企业IM 架构的自由扩展性研究[J].计算机应用与软件,2014,36(6):75-78

[3] 陆伟,林培榕,林姿琼.企业即时通讯系统设计[J].软件导刊,2015,14(10):94-96

[4] 万晓鸽.企业即时通讯系统在企业中的集成应用[J].有色金属加工,2017,46(6):62-64

Design and Implementation of the Instant Messaging System in Cross-platform Enterprise

YANG Ji-peng1, ZHANG Guang-jian2

1.271000,2.100000,

Instant messaging software(IM) has become an indispensable communication and communication tool in people's lives. However, there are many shortcomings in the use of personal IM in enterprises and it needs to be supplemented and expanded. In view of the actual needs of enterprises, we have improved and strengthened the instant messaging system from basic structure of system,the enterprise address book, multi-system collaboration, office automation and other aspects, and formed an instant messaging system that is more suitable for enterprises to use. In addition, individuals use IM on mobile devices for longer and longer, and many corporate users choose to use IM on computers. This system supports Windows, Android, iOS, and Html5. It is a truly cross-platform enterprise instant messaging system.

Instant messaging system; business address book; office automation; design

TP319

A

1000-2324(2019)03-0495-07

10.3969/j.issn.1000-2324.2019.03.031

2019-02-23

2019-06-03

杨继鹏(1970-),男,硕士,教授,主要从事计算机应用教学和研究工作. E-mail:yjp70@126.com

猜你喜欢

即时通讯好友通讯
《茶叶通讯》简介
《茶叶通讯》简介
通讯报道
属羊
民事诉讼中即时通讯记录的证据采用进路
删除好友
即时通讯软件发展模型的实证研究
通讯简史
科学技术哲学视域下的即时通讯
即时通讯软件WhatsApp