基础网络服务器端程序的设计

当前栏目:论文题目 更新时间:2018-08-06 责任编辑:秩名

 科技是第一生产力,随着计算机科学技术的发展,各企业单位都建立符合自身的数据共享信息系统,作为服务器端,既需要保证数据在网络传输的效率性,也需要保证并发访问过程中系统的抗压性。

本课题通过利用猜数字模型来模拟基础网络服务器端程序的设计,通过对该模型的研究分析,设计出服务服务器端程序架构的基本架构,本课题主要通过设计基本线程池以及业务对象池来缓解服务器端的系统压力。

一、绪言

1.选题背景

科技是第一生产力,随着计算机科学技术的发展,各企业、单位都建立了符合自身要求得信息化平台,以此来推动、加快企业单位的办公、生产效率。计算机技术在不断发展,随着时间的推移,每一天都有一项新的技术被发明。但是这些新的技术都是建立在基础技术之上。在信息通信领域,无论采用的是什么开发语言,语言提供的方法多么简单好用,但是不变的还是网络的架构实现方法,基础的网络通信方法,以及程序的结构模块设计方法。

目前建设信息化程序主流是C/S结构。该结构分为客服端系统和服务器端系统。主要的业务逻辑在服务器端完成,而部分逻辑在客户端完成,这样可以很好的减轻服务器端的压力,使客户端的内容更加丰富。

2.课题价值和意义

目前C/S结构开发适合企业的需要,网络通信是实现C/S结构的基石,研究基础网络服务端程序具有十分重要的意义。

(1)在理论方面,通过学习研究基础网络结构,设计出一种符合基础网络通信服务器端的架构,对于这方面的应用具有学习借鉴意义;

(2)对于开发者来说可以加深理解网络底层通信原理;

(3)通过编写软件程序,提升编写软件程序的能力。

3.开发工具

   系统服务器端操作系统为Windows Server 2003,开发平台采用Visual Studio 2008,  开发语言为C#。

二、基础网络服务器端设计

1.软件功能

为了能够模拟基础网络服务器端通信,本课题拟以猜数字去模拟该网络结构。首先在服务器端的文件中存储一个用户指定的数字,然后将其存储到文件中,客户端连接服务器端,用户通过客户端去猜测服务器端的数据,如果客户端猜测的数据太大,就显示数据猜测失败,如果猜测的数据小于服务器端数据,则在客户端提示猜测的数据太小,如此反复,直到客户端猜测数据成功为止。

服务器端设计功能点如下:

(1)可以在服务器端设置猜测的数据,并能够将其存储到文件中;

(2)能够判断服务器端发送来的数据,并进行比对处理。

客户端设计功能点如下:

(1) 在局域网内,可以配置服务器IP地址,通信端口;

(2) 可以通过该客户端与服务器端进行数据通信;

(3) 在客户端可以向服务器端发送猜测的数据。

2.软件流程

图1. 软件流程框图

    客户端通过客户端数据通信模块,将数据发送往服务器端,服务器端接收客户端数据,通过服务器端业务处理,并把处理结果通过服务器通信模块,发送往客户端数据通信模块,然后显示到客户端界面上。

3.技术方案分析

通过对系统的需求分析,本系统可以用3种技术方案实现它们分别WebServer通信技术、远程对象访问技术、基本套接字通信技术。

3.1 WebServer通信技术

WebService技术是微软推出的新技术,它的主要目标是跨平台的可互操作性。为了达到这一目标,WebService完全基于XML(可扩展标记语言)、XSD(XMLSchema)等独立于平台、独立于软件供应商的标准,是创建可互操作的、分布式应用程序的新平台。

WebServer主要应用在跨防火墙的通信、应用程序集成以及B2B的集成,其不适合应用在单机应用程序、局域网的同构应用程序。

3.2 远程对象访问技术

远程对象技术主要是在服务器端建立远程对象,可以在客户端直接创建远程对象,通过远程对象来访问数据。这种技术是DCOM技术的替代品,该技术主要应用于局域网内的数据访问。其技术主要包括远程对象、通道、编组以及监听,而且微软已经提供了一些类和方法,可以直接使用,但是这种技术不适合本课题,因为该技术底层封装的太多,不利于本课题的研究开发。

3.3基本套接字通信技术

基本套接字通信技术,是网络通信的基础,虽然微软在技术方面对套接字做出了相应的封装,但是封装的深度不够深,适合本课题的研究工作。

基本套接字通信主要使用以下几个类,它们分别是TcpClient类、TcpListener类以及NetworkStream。TcpClient类主要应用于客户端,客户端程序通过该类向服务器端发送数据请求命令,也通过该类得到服务器端发送过来的数据。TcpListener类应用于服务器端,通过该类可以在服务器端侦听到客户端的连接请求,如果有客户端连接,可以通过该类的对象得到客户端TcpClient对象。NetworkStream类提供了应用于基础网络访问的数据流,而TcpClient对象依赖与改类型的对象,其对网络数据的传输就是通过NetworkStream 对象实现。

4.软件设计

4.1 系统结构

图 2. 系统基本结构

整个系统主要分为3层结构,它们分别是客户访问层,服务器层,以及数据层。

客户层是该网络结构中与客户通信的画面,其主要功能是向服务器端发送特殊业务请求的数据,如果服务器端有数据回复后,能够将服务器端的数据以特有的表现形式,反应到客户端界面上来。

在本课题中,客户端的主要功能画面为:

 图 3. 客户端界面

  当用户输入正确的服务器IP地址,通信端口以及猜测的时候,系统会自动与服务器进行连接,并比较猜测的数据,并且将处理的结果返回。

服务器端画面如下:

图4. 服务器端界面

用户可以在服务器端设置侦听端口,并设置客户端猜测的数据。

图5. 猜测数据结果画面

服务器端主要为客户端提供用户的数据访问,以及进行处理基本的业务逻辑,由于考虑到系统的性能,本课题中间服务器端进行分解,其主要包括客户端通信模块、线程池模块、共享业务对象池模块。

客户端通信模块:客户端如果业务请求,会与服务器端进行通信连接,而服务器端处理业务完成后,会与客户端进行通信,这一过程主要由服务器端的客户端通信模块来完成。当服务器端侦听到客户连接,该模块会生成一个与客户端相匹配的 通信对象,然后查询服务器端线程池模块,从线程池中找到一空闲线程,将该通信对象传递过去,线程处理业务。相似的,如果服务器端业务处理完毕后,处理结果通过这个通信对象返回到客户端。

线程池模块:线程池主要是为了提高系统性能而设定,在一般的服务器端程序设计过程中,每一次业务对象的访问,都是建立一个线程,当系统处理完毕后,这个线程随即就被关闭,并且器内部资源被释放。但是在系统性能要求比较高的服务器端,这样做是不合理的,服务器端的设计原则是尽量保证资源的重复使用,以此来提高系统的性能。线程池设计的基本原理是在服务器端进程起点的时候,在进程内部创建一定数量的线程,每个线程有一个标志量,当线程空闲时将其设置为1,否则设置为0,初始化时,初始线程标志量为1。创建线程时,首先判断线程池中每个线程的标志量,如果标志量为1,则启用该线程,并把标志量设为0,如果为0,就继续访问下一线程,如果访问完后,线程皆处于工作状态,则在线程池中再创建一个新的线程,当系统调用完成后,不直接释放掉,留以后用。

共享业务对象模块:服务器端的业务处理主要由服务器端的业务逻辑对象组成,为了能够将所有的业务对象整合到一起,需要用的面向对象的多态机制,令所有的业务对象继承一个基本的数据访问接口,而这个对象池模块就是由这个接口对象的数组组成,在设计业务对象模块时,将业务对象分别加载到两个数组中,一个数组放置的是空闲的业务对象,一个数组放置的是正在使用的对象,当系统需要访问业务的时候,会首先调用空闲业务对象中的业务处理程序,然后将其移到非空闲数组,如果当前空闲业务对象数组为空,则根据业务需要创建一个新的对象,并将其存储到非空闲对象数组中。当非空闲业务对象处理完成业务逻辑后,系统将其移到空闲业务对象,使其反复使用。

数据层主要为系统服务器端提供数据访问服务,其主要包括两个部分,分别是基本文件数据以及一个共享内存池,基本文件数据主要存储的业务需要的数据,如果客户端频繁的访问文件,这样势必会造成系统性能开销,降低系统的性能,所以应该把经常访问的数据写到共享内存中,如果需要访问数据,服务器端的业务对象会根据业务要求,首先访问数据端的共享内存,如果内存中已经加载了数据,就访问当前数据,如果内存中没有需要访问的数据,则系统会从文件中加载。

在数据的访问过程中,有时候需要对数据进行写操作,在对数据层进行数据修改时,首先修改文件中的数据,如果修改的数据是经常需要访问的数据,等文件中的数据修改成功后,再修改共享内存中的数据,以免数据保存不同步。 

4.2 系统主要设计对象

   CltSkt 对象,该对象主要是客户端业务逻辑对象,该对象拥护ConServer方法,以及ExectBL方法,这两个方法主要是连接数据库以及执行业务操作。

   SrvSkt对象,该对象主要是侦听客户端连接的对象,以及在该对象中处理业务时实行线程操作。

   服务器主窗体画面对象,该对象主要实行的功能是,当画面起动后,系统会自动启动一个线程,在后台慢慢运行服务器器侦听业务模块。