HP―UNIX下IO多路复用网络服务器的设计方案

时间:2022-09-29 04:49:16

HP―UNIX下IO多路复用网络服务器的设计方案

摘 要:文章首先介绍了TCP网络服务器实现的思路,然后详细描述了用到的相关技术。在文中还详细介绍了实现IO多路复用的服务器的设计方案。最后介绍了网络编程的最新的发展情况和新的技术。文中提到的TCP网络服务器指的都是以软件方式运行的服务器,而非硬件服务器。

关键词:TCP协议;网络服务器SOCKET编程;HP-UNIX;多路复用;阻塞

中图分类号:TP393.09

1 TCP网络服务器概述

当今社会是网络时代,计算机和网络通信技术的发展,使得电脑已经走进了千家万户。我们平时上网浏览网页、收发邮件、下载文件,其实都是在和TCP网络服务器打交道,打开电脑连接网络,其实都是在和居于幕后的各种各样的服务器做交流。在日常应用中,我们经常接触到的服务器有数据库服务器、WEB服务器、FTP服务器、邮件服务器以及各种媒体服务器,它们都是以软件的方式来实现,然后运行在硬件服务器上。

HP-UNIX是一个网络操作系统,同是它也是一个商业操作系统,安装并运行在专用的硬件服务器。它是UNIX操作系统的一个分支,支持各种网络编程技术,同时也支持多进程和多线程。服务器编程,用到的技术主要有SOCKET网络编程,涉及到的是传输层的TCP/IP协议。对于重要的网络服务应用,基本都是IO多路复用的并发服务器。

2 系统设计基本原则

2.1 支持并发。所谓并发,对于网络服务器而言,就是在同一时间内发生的客户访问。服务器必须支持同一时间多个客户端的连接;在编程实现上,一种技术是IO多路复用,另一种技术是使用多进程或者多线程。

2.2 减少资源占用。根据请求的业务逻辑,实现最快的时间响应和最小的时间延迟;服务器在运行时,尽量减少占用服务器资源,包括内存、CPU使用率等等。

2.3 运行稳定。系统能够7*24小时不间断运行,并且工作正常。

2.4 系统自维护。输出运行信息,便于用户进行系统维护和诊断系统运行故障。

3 设计方案

3.1 IO复用方案。一种是通过非阻塞的方式实现。在这种方式下,服务器仅仅注意检查是否有客户在等待连接,有就接受连接;在没有客户在等待时accept调用立即返回。同样,如果有用户发送了数据则recv接收数据,如果没有接收到数据,recv也会立刻返回。但是这种轮询会占用CPU资源,使CPU处于忙碌中工作状态,从而降低性能。

另一种是使用select函数来实现。调用非阻塞的socket会大大地浪费系统资源。而调用select()会有效地解决这个问题,它可以把服务器进程本身挂起来。它使用系统内核监听服务器已接收的所有文件描述符,包括读写和连接在内的任何活动,只要确认在被监控的文件描述符上出现活动(包括有用户连接、用户发送了数据),select()调用将返回,并把有事件活动的文件描述符准备好,从而实现了服务器进程的并发。这种方式,可以随时找出客户端的任何变化,而不必由进程本身对输入进行测试而浪费CPU开销。经过比较,方案采用select函数调用来实现IO多路复用。

3.2 服务调度方案。当一个用户连接服务器之后,服务端可以通过多进程的方式提供服务,也就是使用fork函数调用;也可以使用多线程的方式提供服务,也就是调用pthread系列函数。使用fork实现在技术实现方式上比较简单,但是占用资源比较大,系统开销比较高;使用多线程的方式,有一定的技术难度,但是系统资源占用较低,从服务器本身来说内存占用及CPU使用率等都不高。HP-UNIX平台支持多线程技术,也支持多进程的实现方式,在这里,我们采用多线程的方式。

3.3 稳定性方案。服务采用循环服务的方式,除非是手动停止服务器,否则永远运行。

3.4 运行信息输出方案。服务器以文本文件的方式提供运行日志,实时记录本身的运行数据。包括连接、断开情况,数据发送、接收情况;最重要的是特殊情况的记录,如各种出错信息异常信息等。

4 系统用到的技术

4.1 Socket编程。socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open->读写write/read->关闭close”模式来操作。在实现服务的过程中,会调用一个名称为socket的函数,它处于网络协议和用户进程之间,是一个抽象的概念。

Socket主要的应用分式分为两种,一种是保持稳定的连接,以STREAM数据流的方式提供服务,称为TCP;另一种是没有连接,以DATAGRAM数据报的方式提供连接,被称为UDP。只有在数据准确性能够允许一定差错,实时性要求不高、或者数据量小的场合才会使用UDP数据报的连接方式,其它场合,都会使用TCP连接。

4.2 TCP网络协议。TCP是传输的协议,通过三次握手建立连接,通讯完成时要拆除连接,由于TCP是面向连接的所以只能用于端到端的通讯。TCP提供的是一种可靠的数据流服务,用这种方式,确保传送的数据是准确的。它采用“带重传的肯定确认”技术来实现传输的可靠性。TCP采用“滑动窗口”的方式进行流量控制,用以限制发送方的发送速度。

4.3 IO复用。该技术通过系统内核缓冲I/O数据,当某个I/O准备好后,系统通知应用程序该I/O可读或可写,这样应用程序可以马上完成相应的I/O操作,而不需要等待系统完成相应I/O操作,从而应用程序不必因等待I/O操作而阻塞。该技术主要通过调用函数select或者poll来实现。

4.4 多线程编程。线程是进程中的一个执行片断,是作系统独立调度和分配资源的基本单位,同一个进程中的多个线程之间可以并发执行。一个进程可以启动多个线程,一个线程只能有一个父进程,线程自己不拥有系统资源,只有运行必须的一些数据结构,但它可以与同属一个进程的其他线程共享进程所拥有的全部资源。在一般情况下,创建一个线程是不能提高程序的执行效率的,所以要创建多个线程。但是多个线程同时运行的时候可能调用线程函数,在多个线程同时对同一个内存地址进行写入时,可能会发生冲突,所以要使用线程同步。

5 最新的实现方式

开源技术为UNIX平台的发展提供了新的动力。从Linux kernel2.5.44之后epoll加入Linux kernel中,Epoll以基于事件的方法实现异步io/non-blocking io。它代替loop style方法的select和poll,比后者更加高效更适用于高并发多客户端的应用。event-based通过为不同的events设置callback函数,在该event发生的时候自动执行相应函数。如果希望使用跨平台可移植的event-based可以使用libevent库,它支持多种方法(select/poll,epoll,kqueue,/dev/poll等)。移植libevent时需要下载源文件,可能需要自己修改部分编译失败的源代码,这对使用者有一定的技术要求。

6 系统意义

该系统的设计方案考虑了不同的编程技术,采用了IO多路复用、多线程编程技术实现了具有商业价值的TCP网络服务器,并且系统资源开销比较小。此外,从程序的健壮性上考虑,系统采用了日志输出的方案,使得系统的可维护性大大提高,在稳定运行的同时,减少了运维人员的工作量。

7 结束语

网络编程技术作为信息时候最重要的技术之一,服务在后台,很少为人所知。它的技术实现比较复杂,一个满足业务需求并且运行稳定的服务器,需要一定的编程基础和网络知识。

该设计方案采用了多线程、IO多路复用等技术,较大的提高了系统的运行速度、响应速度及运行效率,取得了较为良好的效能优化效果。

参考文献:

[1]W.Richard Stevens(美).UNIX环境高级编程[M].北京:机械工业出版社,2002.

[2]Gary.Wrigh W.Richard Stevens.TCP/IP详解(卷1):协议[M].北京:机械工业出版社,2007.

[3]Gary.Wrigh W.Richard Stevens.TCP/IP详解(卷2):实现[M].北京:机械工业出版社,2010.

作者单位:德州科技职业学院青岛校区,山东青岛 266232

上一篇:浅谈利用OA办公系统推动医院文化建设 下一篇:基于微信公众平台的学习资源策展平台设计