论文部分内容阅读
随着网络的不断发展,信息技术的飞速创新,越来越多的公司开发出优秀的网络产品包括各种应用软件或者是大型的游戏,还有很多实体通信设备。这些产品都有一个通性,那就是采用客户-服务器模式,大量的客户端与服务器进行通信,来完成整个产品的功能。越来越多的互联网公司现在不单卖自己的产品了,更多的是把产品做成客户端卖给用户,然后通过自己的服务器与这些客户端保持联系,这样不仅可以卖给用户某种产品的服务,同时能够获取用户的各种信息,可以更加方便的为用户提供维护和升级的工作,同时公司可以利用用户的各种数据信息做数据挖掘,从中发现潜在的商机。不难看出服务器和客户端之间的网络通信的重要性。服务器和客户端之间是通过套接字来进行通信的,不同的平台上通信的实现方式有所不同,本课题研究的是unix/linux平台上的网络通信。在unix/linux平台上有5种基本的网络I/O模型:阻塞式、非阻塞、I/O复用、信号驱动I/O、异步I/O。每种模型都有它最适用的场合,性能有很多的差别,选取一个适合的高效的模型对于一个客户-服务器模式的应用来说是很重要的,因为它影响到你的应用的性能。本课题首先介绍了这几种I/O模型的原理以及他们的差异,并重点介绍了select模型还有epoll模型的实现和优缺点。再介绍了一个电信的实际项目,在开发和测试这个实际项目的过程中,引发了对于自适应网络I/O模型的设想,这种自适应模型可以在select模型和epoll模型之间取长补短,并且表现出良好的性能。紧接着比较了很多成熟的优秀的网络通信代码库,在了解和学习的基础上,研究发现他们都具有跨平台性、高并发高性能高稳定性的优点,但是他们在底层都是只选取了某一种网络I/O模型,并且一旦选定了这种模型之后,运行的过程中就不能更改。本课题主要研究了两种比较常用的网络I/O模型:select、epoll。在比较他们的优缺点的基础上,对每种模型都进行了改进,并把它们合起来设计并实现了一个自适应网络I/O模型。并通过大量的数据,来验证这种自适应的模型在实际应用中能够表现出优秀的性能。自适应网络I/O模型以取长补短的方式,实现了一种新的网络通信模式。应用这种模式,服务器能够自主的根据客户端上数据的密集程度选取相对最优的方式进行处理。提高了服务器的性能。