摘要:即时通信软件是一种使人们能在网络上方便快捷识别在线用户并与他们实时交换信息的技术,并逐渐成为继电子邮件之后最受欢迎的在线通讯和交流方式。与传统通信方式相比,即时通信具备快捷、廉价、隐秘性高的特点,在网络中可以跨年龄、身份、行业、地域的限制,达到人与人、人与信息之间的零距离交流。
关键词:即时通信软件;服务器端;设计;实现;
服务器端是即时通信软件的核心,对它的持续运行能力和可靠性、安全性、运行速度和服务效率都提出了极高的要求。由于服务器端重点在于服务用户,界面简单,程序比较稳定,不易发生大的更改,可扩展性则不是一个非常重要的问题。
一、设计原理
客户机/服务器模型将网络应用程序分为客户和服务器两部分。客户方对服务器方发送信息请求,服务器方对其做出相应回答,提供服务。在网络应用中,多数网络应用程序是使用客户机/服务器模型设计的。服务程序通常在一个众所周知的地址监听对服务的请求,也就是说,服务进程一直处于休眠状态,直到一个客户程序提出了请求信息。此时,服务程序被唤醒并且为客户提供服务,对客户的请求做出适当的反应。当建立服务器程序时,为了接收客户请求,服务器程序必须对传输层的一个特定协议端口进行侦听。当服务器配置 接口时,它使用函数让执行体登记一个协议端口。也就是说,程序告诉执行体使用哪一个协议端口进行数据传送。执行体接着告诉传输层某个特定协议端口已被使用,并将其收到的所有数据传送,
二、即时通信软件服务器端设计与实现
1.服务器端程序。通过服务器端的功能需求,依据服务器端程序的设计原则,设计出一种结构简单稳定、性能可靠、扩展性强的程序架构。在此架构基础上,可以灵活选择和更换程序关键任务的算法和策略,以优化程序,使得程序的后续修改和优化,对程序的影响降到很低。
(1)程序架构。可以看出服务器端程序的程序架构设计的非常简单。因为在软件工程上,程序架构越简单,那么程序的复杂度越低,进而故障率越低,程序越健壮,运行效率越高,程序的拓展性越强,后期维护越简单。设计一个简单的程序架构,就像造房子的地基,一个好的地基则为建造一个安全稳同的房子打下了良好的基础。一是启动模块和退出模块。程序架构由启动模块、退出模块、UDP命令监听和处理模块、TCP命令监听和处理模块、后台伺服Agent模块等5大功能模块组成。启动模块负责初始化程序的环境变量、数据结构等信息,然后启动UDP命令监听和处理模块、TCP命令监听和处理模块、后台伺服Agent模块。退出模块负责通知UDP命令监听和处理模块、TCP命令监听和处理模块、后台伺服Agent模块,程序要退出,待3大模块停止后,退出模块负责释放资源,退出程序。二是核心模块。UDP命令监听和处理模块和TCP命令监听和处理模块功能一目了然。后台伺服Agent模块在后台运行,负责监测服务器运行状态、处理用户断线和维护运行数据等事务。这3大模块是程序的主体和核心,虽然模块之间有一些共用的数据结构,但3个模块之间是弱关联的关系,每个模块独立处理本领域范围的丁作,但是不发生直接联系。这样可以从设计上保证程序的健壮性,一个模块出现错,不会影响到另外一个模块的正常运行。具体实现上,3大模块采用线程机制,3大模块模块的主线程在程序运行期一直运行,具体的处理工作则由它们各自派生的事务处理线程来处理,这样可以保证程序有很好的扩展性。事务处理线程生命期绝大多数都很短,处理完本次事务后就结束,即使出错,也不影响主线程的正常执行。
期刊文章分类查询,尽在期刊图书馆
(2)实现。有了一个简单健壮的程序架构,剩下要做的就是在严格按照程序架构进行开发,并且具体实现时,尽量满足前述的设计原则,这样就可以保证最终的程序最接近预期目标。将程序的安全性和可靠性、持续运行能力统筹考虑。具体实现时,往往牵一发而动全身,—个代码块往往会同时影响安全性、可靠性、持续运行能力等各个方面,将这些代码认真、安全地实现,可以同时解决多个问题,同时满足多项设计原则。这里采取的具体措施主要有仔细规划命令系统、仔细考虑和设计后台伺服Agent的功能、仔细检查和处理数据流、优化算法与策略。一是命令系统的规划。命令系统在UDP命令监听和处理模块、TCP命令监听和处理模块中使用。命令系统的规划设计的原则如下:(1)命令标准化和简化。在保证命令标准一致的前提下,尽量简化命令的定义,一条命令只做一件事情,这样可以减少出错机会,降低程序复杂度,加快程序处理速度。(2)采用短命令。尽量采用短命令,命令处理时间短、用户等待时间短。(3)保证命令的原子性。命令之间无关联,都是独立的,一条命令要么完成,要么不完成,没有中间态;不论本命令完成与否,都不能影响其他命令。(4)非法命令处理。不能识别的命令直接丢弃;错误命令格式的命令直接向用户返回命令错误,不再做其他处理。凡是不符合这4条原则的命令,则将命令拆分成2个或多个命令。4条原则的严格执行可以充分实现程序架构设计中的目标,可以充分保证命令系统的可靠性和健壮性,简化程序的结构。二是后台伺服Agent的功能。后台伺服Agent的功能有:检测程序的运行状态,并在界面予以显示,如在线人数、数据库出错次数等信息;检测用户是否断线,如果断线,则更新程序相关的数据结构。加入的功能应该越少越好,只添加一些必备功能。这些功能之间应相对独立,互不影响。三是数据流的处理。对数据流进行仔细检测与出错处理,包括对长度、类型、是否越界等的检测与出错处理,尤其是对缓冲区溢出、内存泄露这些致命的程序漏洞进行严格检查。通过这些措施,可以将数据流对程序的影响降到最低。
2.算法与策略的选择。算法与策略的选择比较复杂,由于篇幅所限,仅就本程序中对在线用户信息的维护这一问题,做个介绍,这也是即时通信软件服务器端程序的最影响性能的任务。本程序将需维护的在线用户信息,定义为数据结构数组。分配一块同定内存,用来存储在线用户信息;另外又定义一个索引数据结构,保存对用户信息数组的索引信息;用户自身还保存有自己的索引位置。当前的策略是对用户信息数组动态使用,算法是顺序查找。当前未采用其他算法的原因,是因为结合索引数据结构,能够满足几百用户同时在线的需求。还有一个不错的性能;而程序的架构可以使得更换算法很方便,为以后进一步优化算法打下了基础。索引数据结构保存了用户信息数组以下信息:最大使用的元素索引、最小空元素索引、在线用户数。有了这些信息,可以减少比较次数,尤其对登录用户,通过最小空元素索引,实现0次比较。而索引数据结构的元素更新也比较简单,用户登录、退出时,结合用户保存的自身索引位置,仅需几次比较、加减或赋值操作即可完成。这里没有采用类封装用户信息和使用动态链表管理,因为类的开销比数据结构大得多;而数组通过索引来寻址,不论是查询还是更新用户信息。都要比动态链表的寻址与管理速度快得多。
近年来迅速崛起的即时通信工具受到了人们的普遍欢迎。即时通信系统作为电子邮件和网络电话的有益补充,丰富了当前计算机网络用户的通信手段,为政府机关、科研院所和个人用户提供了一种有效的信息交流方式,提高了工作效率,拓展了工作空间。可以预见,即时通信的发展和应用有着光明的前景。
参考文献:
[1]查普尔.TCP/IP 协议原理与应用[M].北京:清华大学出版社,2017,3:67-68.
[2]庞怡,许洪光,姜媛.即时通讯工具现状及发展趋势分析,科技情报开发经济,2016,16
[3]代印唐,张世永.即时通信安全研究,研究与设计,2017,4
论文作者:郝晓俊
论文发表刊物:《基层建设》2018年第30期
论文发表时间:2018/11/16
标签:程序论文; 命令论文; 模块论文; 在线论文; 数据结构论文; 服务器端论文; 架构论文; 《基层建设》2018年第30期论文;