朱苗苗 牛国锋
摘要:该文基于对等网络(P2P)设计了一种即时通信系统,该系统采用基于中心服务器的中心化拓扑结构,利用SOCKET编程实现。与传统的C/S模式相比,该模式大大弱化了服务器的作用,服务器只是为维护用户列表,用户之间的通信完全是点对点的,不需要经过服务器中转,从而能够承载更多的用户,大大提高了网络效率。
关键词:P2P;即时;通信系统;SOCKET
中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2014)01-0072-04
随着Internet的快速发展,人们在日常生活工作中应用网络即时通信工具,相互之间的通信交流越来越频繁,但是以往广泛采用的传统通信系统都是通过中间的服务器来中转实现数据传输和交换的,这样的系统势必对起主要作用的中心服务器具有较强的依赖,中心服务器在遭受网络攻击或服务器出错的情况下,将有可能导致整个网络系统被破坏而陷于瘫痪,因此这样的系统安全性就受到了很大考验,而且随着用户的增加,当遭遇网络瓶颈时服务器就会不堪重负,极大地危机到网络安全。
当前正处于互联网技术大发展时代,网络上各种基于P2P的应用软件也正在蓬勃发展,层出不穷,技术也日趋成熟,随着网络用户数量的不断增加,传统的分布式网络系统已不能满足人们对于Internet高性能的需求,与之相比,P2P技术具有无可比拟的优越性。同时,P2P技术也在不断地完善和成熟,并将应用到商业领域、网络通讯、政府信息以及军事领域等,具有广阔的应用前景和市场价值[1]。
1 P2P技术
1.1 P2P技术介绍
P2P技术,也被称为对等网络(peer-to-peer)技术[2],简单地说,就是一种网络用户之间不经过中继设备而直接进行相互数据交换或服务的技术。这种新的技术将传统的互联网以“内容位于中心”模式改变为“内容位于边缘”模式,相比以往的网络模式有较大突破,实现了在网络系统中每个结点用户的地位和功能对等,并将网络资源和服务权利交还给用户,在这种系统架构下,由于每个节点的地位和功能都对等,同时具备服务器和客户端的双重特性,因此可以同时作为服务使用者和服务提供者。P2P构架网络模式示意图如图1所示。
图1 P2P构架网络模式示意图
从P2P的网络连接结构图可以看出,P2P网络在结构上呈现为一种分布式网络结构,各个用户之间相互建立连接和对话机制,可以资源共享和相互通信,这些硬件资源包括网络核心处理能力、系统存储能力、打印机等有效资源,这些共享网络资源通过系统提供的服务和内容,能够被该网络内的其他用户直接访问。系统中的所有用户既作为资源提供者,又是资源获取者。通过P2P技术构建的网络,使人们在网络上的沟通、信息交流变得更加容易和即时,更利于直接共享和交互,各节点用户通过直接连接到网络内其他用户的计算机进行共享文件信息的交换,这种便捷使得互联网信息共享更为便捷、即时、安全可靠。
1.2 P2P技术的特点
P2P技术相比C/S模式具有很大的优越性,其特点主要体现在以下几个方面[3]:
1) 网络非中心化结构:基于P2P技术构建的网络,系统共享资源和各种网络服务分散在网络系统的各个用户结点上,用户之间相互通信和网络服务的实现都可直接进行,不需要服务器的介入和通过其他中间环节,这就避免了可能引起的网络瓶颈问题,风险大大减小。
2) 具有良好的可扩展性:随着互联网的不断发展,网络用户也随之大量增加,人们对于服务的需求也就增加了,P2P网络始终能够根据需求较快地响应并满足网络用户的需要,同步地进行网络系统整体的资源和服务能力的扩充,体现了P2P网络具有良好的可扩展性。
3) 具有较高性价比:对于网络用户来说,整体网络性能优势是被广泛关注并看重的一个重要原因。P2P网络能够整合该系统中其他闲置普通节點,把大量的网络服务、资料存储和计算等任务分布到各个节点上,从而达到有效利用闲置各节点的计算能力和存储空间,实现海量存储和高性能计算的目的,提高网络性能。
4) 较强的网络健壮性:由于P2P结构网络提供的服务和内容不是集中与中心服务器之间进行,而是分散在各个结点用户之间进行,当部分网络用户结点遭到攻击、结点断开或失效时,P2P网络及时根据需要自动调整网络整体拓扑结构。P2P构架网络的建立方式也和其他网络有所不同,用户自发地根据网络加入和组网机制并以自组织的方式建立起来的,各个节点的加入和离开比较灵活自由,网络能够按照系统参数变化情况不断地做自适应式的调整,优化网络资源。P2P架构网络具有耐攻击、高容错等优点,使其更加健壮稳定。
5) 实现整个网络负载均衡: 基于P2P网络构建环境下,系统中的所有节点用户既充当了资源的提供者—服务器,又作为网络中的一个独立个体—客户端,这种结构对服务器的存储需求和计算能力大大减少了,同时网络资源不是集中在中心服务器,而是分布在多个用户节点上,使得整个网络的负载均衡得以更好的实现。
1.3 P2P的拓扑结构
根据拓扑结构的特点可以将P2P结构分为4种形式拓扑结构:集中式拓扑、完全分布式非结构化拓扑、完全分布式结构化拓扑和混合式拓扑。四种拓扑结构的性能比较如表1所示。
2 P2P通信系统的体系结构设计
2.1 网络拓扑结构的设计
按照P2P网络系统组网特点,需要构造一个扩展性能良好、可靠性高、维护方便的拓扑结构。本设计采用基于中心服务器的P2P拓扑结构,也称为集中式拓扑结构,因为对一个即时的通信系统来说,这种拓扑结构可以很方便的管理用户节点,缩短了查找用户节点的时间,更能达到即时通信的目的,它的网络结构示意图如图2所示。
在该系统中服务器的作用就是维护用户列表,用户注册登录以后,会把所有在线用户的一些信息包括用户的ID,用户名,用户IP,端口等搜集统一汇总进行维护。客户端也会通过一个数据显示结构把所有服务器发送过来的用户信息保存起来,并在客户端的界面上显示出在线用户。同时,客户端可以直接双击其他用户的图标与之建立连接,进行即时对话通信和数据交互。当有用户动态加入或者是退出时,会先将消息发送给中心服务器,然后服务器再把这些消息发送给其他的在线用户,其他的用户会根据消息的不同采取不同的操作,既将该用户信息加入或是删除。
2.2 总体架构设计
根据该系统所采用的拓扑结构设计总体架构如图3所示。
在该系统中无论是服务器端还是客户端都同时存在两个Socket,即ClientSocket与ServerSocket。在刚启动客户端程序时,客户端的ClientSocket会与服务器端的ServerSocket相连接,此时用户要完成的任务是注册新用户或者是登录系统,一旦注册成功,服务器端会返回一个新的用户ID,并且服务器会将新用户信息添加到数据库。客户端得到ID后即可有权限进行登录操作,用户登录成功后,服务器就会将所有在线的用户信息发送到客户端。然后,服务器会将该用户的信息发送给其他的在线用户,此时需要考虑一种极端的情况就是所有用户的ClientSocket都与服务器端的相连接,那么服务器端就会通过ServerSocket将新登录的用户信息发送给其他在线的所有用户;否则,服务器端就会通过ClientSocket发送。
客户端将接收到的所有的用户信息存储起来,并在客户端程序的界面上显示出来相关信息,双击任一在线用户,即刻会弹出与之交流的对话框。也就是主叫客户端的ClientSocket与被叫客户端的ServerSocket相连接成功,两者之间就可以进行即时通信交流。
当客户端退出时,客户端的ClientSocket会重新与服务器端的ServerSocket相连接,然后向服务器發送退出消息,服务器接收到退出消息时会利用服务器端的ClientSocket与每个服务端的其他在线用户的ServerSocket相连接,然后向他们发出该用户退出的消息,其他在线用户接收到退出消息后会处理这一消息,也即是将该用户的信息从存储数据中删除。
3 客户端软件界面设计
3.1 客户端界面设计
此通讯软件的登录窗口与一般使用的腾讯QQ、飞信等界面较为相似,最上端为“用户登录”字样和图片,然后是账号和密码输入框,正确输入帐号和密码,点击登录按钮即可登录;初次使用需点击“帐号申请”并按要求填写相关的信息申请一个新的帐号。在登录的同时还可选择“记住密码”和“自动登录”选项,那样在登录以后系统就会把这些信息写进系统的配置文件中,下次重新登录时就会自动登录或者是不用输入帐号和密码。当点击界面上的“设置服务器”选项时,可以设置连接指定的服务器和端口。客户端登录界面如图4所示。
3.2 注册界面设计
申请账户窗口为注册界面,初次使用的客户在这里设置个人登陆账户的昵称和个人登陆密码,选择用户性别,点击“提交”按钮成功后,就完成了注册的操作。注册成功后,登录窗口的帐号内容就是注册时返回的用户ID,密码就是注册该ID时输入的密码。
3.3 通信界面设计
用户登录成功以后,会显示自己的用户名、用户ID、在线状态,以及好友列表。好友列表里会显示所有在线用户的姓名,欲与之进行通信,双击即会弹出交谈窗口。在通信窗口内输入你要发送的信息就可以一点击“发送”按钮进行发送信息进行即时通信,如果你要加入魔法表情,点击选择展开窗口内不同表情按钮即可,对方在收到消息前会显示魔法表情。该窗体显示接收到的消息,点击“回复”按钮,会显示回复信息窗口。
除了以上一些客户端的主要窗口外,还有一些简单界面设置窗口,可以选择设置系统是否要开机自动运行、是否取消自动登录以及调节窗口的透明度等等。
4 客户端SOCKET程序设计
客户端是实现P2P通信的载体,客户端之间的通信就是靠主叫端ClientSocket与被叫端的ServerSocket相连接实现的,同一个客户端的ClientSocket和ServerSocket的作用也会不同。客户端的ClientSocket主要负责系统启动时的注册、登录,还有负责主动与其他客户端交流以及退出系统的作用;而客户端的ServerSocket的作用则是负责接收服务器发送而来的其他在线用户信息和其他客户端的主叫信息;所以一个客户端的ClientSocket和ServerSocket的处理函数也会不同。在进行程序设计时,ClientSocket的消息处理函数与ServerSocket的消息处理函数会有一些相同的地方,这些相同的地方就是用于用户之间通信交流的。
5 总结
本系统是基于P2P技术设计出一款弱化服务器的即时通信系统。传统的C/S通信模式对服务器的依赖较强,一旦服务器遭受了攻击而瘫痪,导致整个系统受到严重影响,即使系统有多个服务器工作,那么此时其他服务器的负载也会相应增加;且随着用户的大量增加,系统的服务器的数量也会增加,从而大大增加了整个系统运行成本[4]。该设计实现了一些简单的P2P的底层实现机制和即时通信系统的基本功能,弱化中心服务器承载的作用,使用户之间的实现直接通信而不需要服务器的中转,从而使服务器的承载量大大减少,只是保证用户列表的正常有序维护。不仅对于整个系统的服务器数量需求大大减少,降低了成本,而且整个网络的安全稳定性大大提高了。
参考文献:
[1] 雷蕾.P2P环境下即时通信软件的设计[J].徐州工程学院学报:自然科学版, 2010( 2) .
[2] 李振汕.基于P2P的即时通信系统的设计[J].计算机与现代化,2011(7).
[3] 李京文,高燕,张在腾.论P2P技术的研究现状[J].电脑知识与技术:学术交流,2007(9).
[4] 张春红,裘晓峰.P2P 技术全面解析[M].北京:人民邮电出版社,2010: 191-197.