Linux环境的Http服务器设计与实现

 2022-01-30 07:01

论文总字数:30800字

摘 要

随着互联网的普及,网络游戏逐渐成为了一种文化,成为一种主流的娱乐方式。不仅如此,网络游戏产业的发展还可以带动其他相关产业的发展,使其逐渐成为了文化产业的一个增长点,对国家的经济和社会的发展有着很大的推动作用。

在这样的情况下对于网络游戏的研究变得很有必要,而在手机游戏设计中,服务器端发挥重要的作用,所以本文对网络游戏客户端进行研究。本文具体的工作如下,参照热门的三层网络服务器结构,在Linux环境下,基于与HTTP协议设计了服务器的总体框架,包括网关服务器、游戏服务器、缓存服务器、数据库服务器。对每个服务器在功能和实现上都进行了详尽的介绍,借助成熟的框架实现了服务器的负载分流,数据交互,逻辑处理,数据缓存,数据储存等功能。

最后对该服务器进行测试,表明该服务器无论从功能和性能上都满足企业级要求。

关键词:手机游戏,Linux,服务器

Design and implementation HTTP server based on Linux

Abstract

With the popularity of the Internet,online games gradually become a culture and mainstream entertainment. Moreover, the development of the online gaming industry can also promote the development of other related industries, it gradually became a growth of cultural industries, the development of the national economy and society has a significant role in promoting.

In such circumstances the study of online gaming has become necessary, and the phone design, the server-side play an important role, so this paper studies the game client. In this paper, concrete work as follows, referring to the popular three-tier network server architecture in the Linux environment, based on the HTTP protocol design the overall framework server, including gateway servers, game servers, cache servers, database servers. Each server functionality and implementations for a detailed description, with a mature framework implements server offload, data exchange, logic processing, data caching, data storage and other functions.

Through the analysis of the test results, the mobile phone network game server structure to meet the functional and non functional requirements.

KEY WORDS: Mobile game ; Linux ; Game server

目录

摘 要 I

Abstract I

第一章 绪 论 3

1.1 概述 3

1.1.1 手机游戏简介 3

1.1.2 选题背景 4

1.2 论文主要工作和结构安排 4

第二章 关键技术介绍 6

2.1 Linux系统简介 6

2.2 TCP/IP协议概述 6

2.3 Spring Framework、MyBatis介绍 7

2.3.1 Spring Framework概述 8

2.3.2 MyBatis概述 9

2.4 Redis概述 9

第三章 系统总体架构 11

3.1 服务器架构 11

3.2 负载均衡 12

3.3 服务器总体架构 13

3.4 缓存服务器 14

3.5 游戏服务器 14

3.6 日志服务器 15

第四章 服务器设计与实现 16

4.1 数据库设计 16

4.2 缓存层设计 17

4.3 数据层设计 19

4.4 客户端与服务器端通信 20

4.5 游戏服务器 23

第五章 系统测试和分析 26

5.1 游戏测试的必要性 26

5.2 测试环境 26

5.3 测试结果 26

结 论 31

致 谢 32

引 用 33

附 录 34

绪 论

概述

手机游戏简介

手机游戏广义来说是指在功能手机,智能手机,智能手表,平板电脑以及其他便携式设备等一切手持设备上的视频游戏。

最早的手机游戏可以追溯到贪吃蛇,其由诺基亚大部分移动设备预安装,当时在350多万台诺基亚6110设备中都有其身影,由于手机厂商的大力推崇,使其成为最受欢迎的手机游戏之一,也使手机游戏这个领域进入人们的视野。

进入20世纪末,由于建立了行业标准,手机在经济的驱动下大规模普及。造成此次大爆发的原因是,手机制造商的技术变更迭代的速度边的越来越快。随着这些技术的发展,手机游戏也变得更加复杂,在显示,处理,储存,接口,网络带宽和操作系统上都有了大幅度的改进。

在最初手机预装的游戏仅限于单色的点阵图像和单声道铃声。操作指令通过键盘按钮输入。到21世界初,WAP和其他早起的游戏互联网允许简单的客户端-服务器游戏的在线托管,这表示手机游戏可以连入WAP服务器进行操作。

随着功能手机的出现,此处指拍照手机。更多的硬件供电方式,彩色屏幕,多声道音频和下载及储存应用程序的能力铺平了一些商用移动游戏的道路。一些早起公司开始使用手机拍照技术进行移动游戏。

在2008年推出的苹果的App Store根本上改变了市场。首先,它扩大了消费者的机会,提供了下载应用程序的途径,即通过打开的网络运营商的商店或第三方商店。其次,移动开发者可以直接上传应用程序到App Store中,而不需要与出版商和运营商进行漫长的谈判,这增加了他们的收入份额,手机游戏开发变得更加有利润点。第三,在App Store的紧密集成与设备本身导致很多消费者尝试应用,以及游戏市场获得了相当的推动作用。因此,在此之后商业上成功的手机游戏数量激增。

如今,手机游戏可以从大量的应用商店和移动运营商的门户网站进行下载,此外还有一些手机游戏是预装在移动运营商的手持设备中。而如今的手机游戏已经从单纯的键盘操作发展到可以由红外连接,蓝牙,同时可以借助GPRS等新技术来完成多人游戏过程的手机上的网络游戏。

随着手机游戏的形式越来越丰富多彩,其游戏形式也不断向网络游戏的形式靠拢。自2002年我国的网络游戏进入了商业化运营阶段,得益于我国游戏厂商的自主研发能力的提高和游戏运营商对于玩家需求的深度挖掘,我国网络游戏呈现了快速增长的趋势,增长率连续五年保持在30%以上。2008年, 我国网络游戏的市场规模已经达到228.7 亿元,比2007 年增长72.2%;预计未来 三年的年均增长率仍将保持在20%以上,2013年整个市场规模突破820亿元。

游戏产业不断发展成一个不可忽视产业,甚至成了一种文化现象,而网络游戏也随之成为了一个主流的娱乐方式。不仅如此,网络游戏产业的发展带动了其他的周边产业的发展,成为了一个经济增长点。

选题背景

Linux是一套免费使用和自由传播的类Unix操作系统,是社区智慧的结晶产物,由于其开源性以及可定制型,使其成为万千程序工作者的宠儿。Linux操作系统具有高效性、灵活性以及可移植性,在绝大多数的机器设备上都可以顺利运行。不仅如此,Linux还继承了Unix稳定、可靠、安全的特性,有强大的网络功能,方便网络程序的编写与使用。在上述多种优势下,经过分析,我们选择了在Linux操作系统下进行我们游戏服务器端的编写。

随着Internet的普及,网络已经与我们息息相关,由于当今世界上的绝大部分网络程序都是建立TCP/IP(传输控制协议/网际协议)协议的基础上的,同为OSI (Open System Interconnect,即开放式系统互联)七层参考模型之中的HTTP协议也发挥了巨大的作用。所以设计一个稳健的游戏服务器端,网络协议成为了重要的一部分,同样的,为了更好的了解网络协议,设计并实现一个游戏服务器端不失为一个不错的办法。

由于公司游戏的性质,本课题选用的是客户/服务器(Client/Server,即C/S)结构。C/S这种结构可以讲负载分配到客户端和服务器端来实现,减少开销,提高效率。客户端用于展现整个产品的游戏逻辑,提供玩家操作接口;服务器端提供后端逻辑功能,对所提请求进行逻辑判断并返回结果给客户端。简言之,客户端的任务就是将用户的需求提交给服务器端,服务器端对这些请求进行处理,将结果以特定的方式反馈给客户端,客户端以某种形式表示这些信息。Client程序的任务是将用户的要求提交给Server程序,再将Server程序返回的结果以特定的形式显示给用户;Server程序的任务是接收客户程序提出的服务请求,进行相应的处理,再将结果返回给客户程序。这些信息全部都由服务器发送给客户端,客户端只是用于显示这些信息。

服务器端编写的主要语言为Java语言,借助SSM(Spring,Spring MVC,MyBatis)框架完成了整个服务器的构建。这三种框架经过时间的磨练,是符合现在商业模式的成熟框架。借助三个框架完成模块的解耦、控制反转(Ioc)、分离对象、映射数据库等工作,使服务器端程序更加健壮。

以上,在商业模式下选择经济适用的方式完成项目,使该课题的选择落脚于现实,由此散发,寻找更优良的解决方案。

论文主要工作和结构安排

本课题基于已立项的网络游戏项目。该项目设计和制作面向各个年龄段的玩家,是一款强IP横版跑酷精品手游。网络游戏与其他软件不同的地方在于,它要同时面对大量的连接人数,为了保证整个系统可以稳定的运行,需要大量的技术支持。所以一个游戏服务器端的稳定与否决定了这款游戏的生存周期。所以该课题的重点在分析传统游戏服务器的特点,立足现在,放眼未来,结合自身的情况,设计并开发出符合自己情况的服务器,以满足整个系统的需求。

全文共分五章,对网络游戏服务器设计进行了研究和讨论。具体的章节安排如下:

  1. 介绍了网络游戏的历史和发展前景,选题背景,并介绍了本文的组织结构。
  2. 分析了该游戏的关键技术。
  3. 介绍了系统总体架构,即游戏服务器,网关服务器,缓存服务器和数据服务器,并对各个服务器进行了详细的介绍。
  4. 介绍了服务器设计和实现,对细节与进行了详细的介绍,包括数据库设计以及各层的设计。
  5. 介绍了服务器的测试情况和必要性。

关键技术介绍

本章主要介绍了该课题的相关理论知识。包括Linux系统简介、TCP/IP协议概述、SSM框架介绍,Redis概述。

Linux系统简介

Linux是一种自由和开放源代码的类UNIX操作系统。该操作系统的内核由林纳斯•托瓦兹在1991年10月5日首次发布。在加上用户空间的应用程序之后,成为Linux操作系统。Linux也是自由软件和开放源代码软件发展中最著名的例子。

Linux具有开放性,多用户,多任务,丰富的网络功能,可靠的系统安全,良好的可移植性,具有标准兼容性,良好的用户界面(命令界面,图形界面等),出色的速度性能等特点。

操作系统在一个网络系统中占有关键的位置,Linux有很强的网络组织能力,由于其特性,它的网络级别是最高的,不仅对现在网络协议完全支持,而且对下一点的网络协议也有支持。在Linux网络编程中,支持Socket编程和TCP/IP协议,可以完成多个程序和多个主机之间的通信连接,不仅如此,它还提供了两种信息传输协议,即TCP和UDP,两者相比UDP是基于消息的,TCP是基于流的。

由于Linux的可移植性,它已经被装载在大量的可移动设备上和嵌入式设备上,例如现在流行的各种电视盒子,其内核都是Linux系统;不仅如此,它有很强的稳定性和可定制性,在大型平台上可以看见它的身影,世界上绝大多数的超级电子计算机,其操作系统都是Linux。可谓在电子设备上占领了一大片河山。

TCP/IP协议概述

TCP/IP是一个协议族,是一组在不同层次上的多个协议的组合,它对数据如何封装、定址、传输、路由以及在目的地如何接收,都加以标准化。TCP/IP一般被认为是一个四层协议系统,为了方便表示,通常将其转化为OSI模型。为了方便说明,下面对TCP/IP协议和OSI模型进行说明。

表2-1 TCP/IP协议与OSI模型对应表

OSI七层网络模型

TCP/IP四层概念模型

对应网络协议

应用层(Application)

应用层

TFTP, FTP, NFS, WAIS

表示层(Presentation)

Telnet, Rlogin, SNMP, Gopher

会话层(Session)

SMTP, DNS

传输层(Transport)

传输层

TCP, UDP

网络层(Network)

网际层

IP, ICMP, ARP, RARP, AKP, UUCP

数据链路层(Data Link)

网络接口

FDDI, Ethernet, Arpanet, PDN, SLIP, PPP

物理层(Physical)

IEEE 802.1A, IEEE 802.2到IEEE 802.11

网络接口:也称为链路层,一般是指操作系统中的驱动程序以及物理级别的网络接口设备,是整个模型的底层,不仅包括了程序还包括了物理接口细节。链路层层包括的协议为ARP、RARP和Ethernet等。

网际层:即网络层,也称为互联网层,处理的是网络中的各种活动,其对应OSI的应用层、表现层和会话层。它是核心部分,其中包括了IP的各种信息,以及对IP地址的动态映射等。其中包括IP协议,ICMP协议以及IGMP协议。

传输层:为两台主机上的应用程序提供端到端的通信。其中包括两种不同的传输协议,分别是TCP和UDP。二者使用的都是不可靠的IP服务,但是由于各自的要求,它们提供了一种相对而言较可靠的运输层服务。UDP可以为应用提供收发数据报的功能,但是和TCP比较它是不可靠的,因为它不能保证数据报可以完整安全无误的到达目的端。因为TCP在交换数据前先建立了TCP连接,确定对方信息后才开始数据报的传输,而UDP则不同,它缺乏可靠性,只负责传输数据,但是并不保证数据完整到达,任何可靠性都是由应用层来提供的,但是它比TCP有更高的效率。

应用层:应用层是整个模型栈的顶端,它负责处理不同应用程序细节,它包含Telnet远程登录、FTP文件传输、SMTP邮件传输和SNMP网络管理协议等。它是Linux网络设定很重要的一层,Linux服务器的配置文件主要针对的是这一层的协议。

表2-2 TCP/IP模型各个层次的功能和协议

层次名称

功能

协议

网络接口
(Host-to-Net Layer)

负责实际数据的传输,对应OSI参考模型的下两层

HDLC(高级链路控制协议)

PPP(点对点协议)

SLIP(串行线路接口协议)

网际层
(Inter-network Layer)

负责网络间的寻址
数据传输,对应OSI参考模型的第三层

IP(网际协议)

ICMP(网际控制消息协议)

ARP(地址解析协议)

RARP(反向地址解析协议)

传输层
(Transport Layer)

负责提供可靠的传输服务,对应OSI参考模型的第四层

TCP(控制传输协议)

UDP(用户数据报协议)

应用层
(Application Layer)

负责实现一切与应用程序相关的功能,对应OSI参考模型的上三层

FTP(文件传输协议)

HTTP(超文本传输协议)

DNS(域名服务器协议)

SMTP(简单邮件传输协议)

NFS(网络文件系统协议)

Spring Framework、MyBatis介绍

两者都是Java下的成熟的开源项目,已经大规模的运用在各种商业项目中。Spring是个轻量级的开源框架,它提供了新的思想和方法,即面向切面编程和控制反转的思想,借助这两个手段提供管理业务对象服务。Spring框架内嵌SpringMVC,提供了完整的MVC模块MyBatis框架集合多种操作型关系数据的概念和方法,它是一个强大的数据访问工具和解决的方法。

Spring Framework概述

Spring Framework是一个开源的Java/Java EE全功能栈(full-stack)的应用程序框架,以Apache许可证形式发布,也有.NET平台上的移植版本。

Spring采用了IoC原则的配置管理,由IoC创建、管理、装配、配置对象,并且照顾这些对象的整个生命周期,即编写代码时候无序关注对象和服务的关系,只需要负责将对象交给Spring,容器会将对象与服务联系起来。IoC可以把应用的代码量降到最低,保证了代码的可读性,也使得代码更容易被测试,单元测试的时候不需要用JNDI去查找机制,此外最小的代价保证了它的低耦合性。

AOP是面向切面的编程,允许程序模块化横向切割关注点。也就是说,将不同的类的相同行为封装成可以复用的模块。例如,一个事务模块可以被称为事务的AOP切面。AOP中包括关注点和横切关注,大致来说关注点是一个模块行为,而横切关注是一个关注点。Spring几乎所有的上下文中都有AOP的身影。

Spring框架由多个基本模块构成,这些模块构建在核心容器上,核心容器也称为应用上下文,它是基本的Spring模块,它使Spring成为一个容器。下面将几个重要的模块展示出来并作分析,如图2-1。

图2-1 Spring框架的七个模块

组成 Spring Framework的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。每个模块的功能如下:

核心容器:核心容器提供 Spring 框架的基本功能。封装了框架依赖的最底层部分,包括资源访问、类型转换及一些常用工具类。其中Bean模块提供了框架的基础部分,包括反转控制和依赖注入。所用的用户对象都放在Bean中,完成了将对象之间的依赖关系提取出来,只需要提供对象,其他的由Spring维护。

Spring 上下文:Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。

Spring AOP:AOP模块是Spring的核心思想,即面向切面。将提供比如日志记录、权限控制、性能统计等通用功能和业务逻辑分离的技术,并且能动态的把这些功能添加到需要的代码中。

Spring DAO:通过使用JDBC的操作方法和DAO模块,保证了代码的整洁性,并且规避了JDBC的多种问题,例如不释放接口、资源错误导致数据库关闭等问题,因为它在错误之上提供了异常访问层,同样的,它利用AOP对Spring其他对象提供事务管理。

Spring ORM:是在DAO层上的对象映射工具,提供普通的ORM,即对象和关系映射,Spring支持集成主流的ORM框架。本项目借助MyBatis完成ORM的事务管理。

Spring Web 模块:Web模块提供了Spring MVC Web的框架实现,提供了一个适合web应用的上下文,支持多种web任务,完成了请求资源的注入和数据绑定等任务,还提供一套易用的JSP标签,与Spring的其他技术无缝协作。

Spring MVC 框架:SpringMVC是Spring配备构建web应用的框架,它可以与其他多种框架进行耦合,用控制反转把业务对象和业务逻辑分离,使其变得高度可配。

MyBatis概述

MyBatis是一个Java持久化框架,它通过XML描述符或注解把对象与存储过程或SQL语句关联起来。

与其他的对象关系映射框架不同,MyBatis并没有将Java对象与数据库表关联起来,而是将Java方法与SQL语句关联。MyBatis允许用户充分利用数据库的各种功能,例如存储过程、视图、各种复杂的查询以及某数据库的专有特性。

MyBatis作为ORM框架,完成了数据库内数据与Java对象的映射,通过封装的函数与JDBC进行交互,完成增删改查的操作,通过XML文件的配置,完成Java对象和MySQL之间的转化。

Redis概述

在技术迭代如此迅速的今天,传统的关系数据库已经不足以满足各式数据访问的需求,所以我们采用了新的数据库,即非关系数据库来扩展和补充关系数据库。

该项目选用Redis作为游戏数据缓存层,将游戏数据暂时保存在Redis中,使Redis成为关系数据库和游戏服务器之间的缓存,将关系数据库中的内容取出,再定时将特定的数据同步到关系数据库中。这样避免了在大规模操作时对数据库的大量读写操作,防止整个游戏服务器的运行效率降低,稳定性下降。

Redis具有如下特征:

Redis是一个开源的非关系数据库。可以像其他的数据库一样,做数据的缓存和消息代理。它是基于Hash数据结构,以K-V的形式存储的,操作简单,高效有序。

数据模型多样:Redis支持多种数据结构,其中包括Lists,Hashes,Sets以及Ordered Sets等数据类型。多种的数据类型保证Redis可以应付绝大多数的情况,保证了Redis使用范围。

支持数据持久化:为了保证其优良的表现,快速的读写存取,Redis是内存上是一个数据集。可以根据要求,将其持久化到硬盘上,或者添加命令日志。

支持服务器集群:Redis支持主从式异步复制,具有非常高效的非阻塞同步,此外它可以同步其他网络布局。Redis支持大量的服务器操作,其中包括异步改写并追加的文件或保存到磁盘,可以将集群插槽数结点进行映射,所以相同集群内的数据,可以相互复制和同步,让Redis形成多层结构。

高性能:MySQL属于非关系数据库,正如前面所介绍的Redis是内存上的一个数据集,所以大量的操作都是在内存上进行的,最后可以通过配置统一到磁盘上,如此的操作与在硬盘上改写数据库操作的效率相比,快的不是一星半点,所以Redis在读写操作的速度上要比关系数据库快很多。此外Redis支持类似Lua的脚本语言,可以使用其自身的复制操作以及脚本等完成磁盘持久性,保证了Redis的性能。

系统总体架构

在真实的网络游戏服务器中,服务器要与客户端进行事实的交互,无论是强联网和弱联网,最后服务器都要对客户端传来的请求进行快速的处理。那么,服务器在处理请求的每一个环节都不能出现堵塞、卡顿等现象。这就要求在架构服务器之前就要有一个整体的规划,如何负载分流、如何记录日志、如何储存信息等。本章将分别介绍服务器的各个架构。

服务器架构

服务器的架构如3-1所示。根据任务的不同,主要分为四层:数据持久层,数据缓存层,逻辑处理层和请求分派层。

图3-1 服务器架构图

各个层的说明如下:

请求分派层:我们将服务器搭建在第三方网络云平台上,由第三方完成请求分派。

剩余内容已隐藏,请支付后下载全文,论文总字数:30800字

您需要先支付 80元 才能查看全部内容!立即支付

该课题毕业论文、开题报告、外文翻译、程序设计、图纸设计等资料可联系客服协助查找;