以下一篇是以服务器为例的,希望对你有帮助。
-------------
学习游戏服务器编程基础篇
姜雪伟
前段时间,一直给开发者灌输学习3D游戏引擎技术,包括游戏底层数据结构封装,算法与游戏实战技术分享视频课程,以及编写了一些使用算法解决游戏实际问题等等方面的文章。再给读者介绍3D游戏引擎的同时,也有人问我关于如何学习游戏服务器编程技术,其实我也喜欢游戏服务器编程。在游戏开发过程中,游戏服务器开发的工作量相对客户端来说少的多,比如游戏开发后期客户端要调各种效果,更换UI等。当然网上关于开源的服务器代码也很多,在Github上能搜到很多代码,比如java的,C#的,C++的,C的,erlang,python等等,很多人为此比较迷惑不知道到底该学习那种编程语言。服务器编程开发也是随着地区不同而不同,IT行业发展的中心是北京,上海,广州,它们对于游戏服务器编程语言的需求也是不同的,北京偏向于java语言编程,上海偏向于C++语言编程,广州偏向于erlang编程,这个也是告诉开发者,如果想去不同的地方可以根据需求有针对性的学习。本篇文章就是告诉读者如何学习游戏服务器编程开发?
我本人还是喜欢C++编程,其实语言只是一方面,原理还是要清楚的,下面我谈谈学习服务器编程的一点体会。
学习游戏服务器编程也要分阶段的,先把基础学习好,编程语言是必须具备的,可以学习java,C++,C#,erlang任意一种要熟练掌握,还是以C++为例,游戏编程中经常会使用一些宏定义或者模版定义,开发者要知道宏定义的含义以及模版定义的含义。服务器开发中经常会使用STL模版中的对象,比如Map,Dictionary,List,Vector等等。网上有很多学习资料,另外在这里还是要谈到数据结构,不论在客户端开发还是在服务器端开发,数据结构都会用到,比如哈希表,二叉树,队列,堆栈等等,以上提到的是关于语言方面必须具备的。
语言基础掌握牢固的,可以直接略过这一阶段的学习,直接学习第二阶段,关于网络通信协议,比如我们TCP/IP协议一共分七层,各个层的作用是什么?服务器传输有几种常用的协议分别是TCP协议,UDP协议,还有Web使用的Http。TCP协议是可靠的协议,数据传输后必须要经过确认,UPD协议是不可靠的,无需确认,Http协议是主动的去获取,主要用于资源和Web注册的。这三种都会在服务器开发中使用到,必须要要掌握。在这里给读者展示一下各个层包含的协议:
应用层:TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 等等
传输层:TCP,UDP
网络层:IP,ICMP,OSPF,EIGRP,IGMP
数据链路层:SLIP,CSLIP,PPP,MTU
通过上面列举的点,我们知道了各个层都有哪些通信协议,当然各个层不是孤立存在的,它们之间是有关系的,在计算件原理中也有这方面的介绍,这里借用网上的图给读者展示如下:
应用层主要是我们自己程序处理的,它可以通过传输层和网络层进行消息的传输,将上图再进一步细分如下所示:
通过上图可以很清晰的看到TCP/IP协议组的组成,具体大家可以查看大学课程《计算机原理》。这些基础的通信协议掌握了后,接下来就要掌握Socket套接字了。socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。
Socket套接字是通信的最基本方式,在游戏中的服务器和客户端之间通信,以游戏登录为例,客户端先创建Socket,然后把玩家的用户和密码以及登录服务器的IP地址,端口号这些数据写入到Socket中传送到服务器端,服务器会做监听,接收到消息后,打开读取Socket信息进行处理比如验证信息的正确性,然后服务器创建Socket,把传送给客户端的消息写入到Socket,发送给客户端,客户端也会做监听操作,客户端接收到消息后,客户端打开Socket,读取消息。客户端和服务器之间的通信方式如下所示:
在TCP/IP协议中有三次握手,通过三次握手可以建立一个可靠连接,效果如下图所示:
三次握手在服务器端程序员面试中,经常被提到,掌握了TCP/IP协议后,接下来进入实兵演练阶段,也看看自己对网络这块掌握程度。以Unity为例,可以学习TNet超轻量级的网络传输,因为它没有数据库,但是可以很好的验证学习的TCP协议以及Socket套接字,自己可以在此基础上再尝试做一些消息传递,最后要学习一下服务器存储所需要的数据库MySql。
学习数据库的安装,数据库操作比如新建表,插入数据,删除数据,读去数据等,掌握数据库后,接下来就需要通过游戏服务器编程对它进行操作了,建议先学习网上的PhontonServer,它是使用C#编写的,方便开发者学习,另外它提供了Unity实现的Demo,开发者可以调试连接,从而熟悉Mysql。
以上这些知识也是作为服务器开发者必须掌握的,掌握了这些技术后,继续提升的最好方法是去公司跟着项目走,在后面章节还会给读者介绍关于如何架设真正的游戏服务器以及知名IT游戏公司的服务器架构设计以及服务器负载均衡的设计,最终会介绍如何搭建全球同服服务器。
网页游戏程序构成分为三大部分:第一是数据流程。第二是美术。第三是程序。
1)数据流程
数据流程其中,数据流程包括了功能。也只有在功能中才能体现数据流程。
比如最简单的卖买产品。要实现这个功能,那么需要有产品基础表、产品详细表、商店表、背包表。如果扩展性更强,相应的双表是少不不了的。
表的问题都简单了,关键是这个物品有什么用,这样物品的来源,一大堆数据,物品的走向,又是一大堆数据。最后,这些数据得绕成一个圈。
绕圈是一件困难的事情,特别是功能和道具多了起来的时候。难度是2的n次方。
2)美术:
UI:简洁漂亮的界面总会有好处。
小图标:道具,地图,装备,一类至少10个吧?大体上百把个是需要的。
3)程序分5个部分:
服务器定时器:(C语言或自己设定服务器)定时循环执行某一段代码。而这段代码主要是根据数据库的数据进行更新。这个可以找个C语言程序员来做。对于C语言程序员来讲,这个功能是相当的简单。当然,具体的处理数据的判断和操作数据库,需要你自己写。让C语言程序员给你段标准代码就行了。完全支持sql语句的。
功能页面、功能函数。主要就是数据存取,判断,数据走向。
ajax函数:(可选)某些需要伪即时的功能要用到。
javascript函数:(可选)模拟客户端的数据计算。也就是webgame的与时间相关的数据。分为两部分。一部分是真实数据,是由服务器端的定时器计算的。另一部分是只有初始值,客户端显示用的。不需要即时同步,仅仅需要模拟同步就行。
数据库:一大堆基础数据表和详细数据表。基础数据表:比如等级1到等级100的用户的属性初始值。详细数据表:每个用户的具体属性。
网页游戏的开发工具和技术
网页游戏的开发技术有很多,但常用的开发工具和技术主要有以下几个:
1)ASP技术 Actieserver Paga(ASP)意为“动态服务器页面”。ASP是微软公司开发用来代替CGI脚本城府的编程工具,当用于设计动态网站。ASP脚本集成于HTML中,无需编译即可直接解释执行,独立于浏览器(能解释LTML码的浏览器即可浏览ASP网页),保护源码(ASP脚本在服务器上执行,传到浏览器端的只是ASP执行结果所生成的常规HLML代码)。
2)Flex技术Flex是Adobe的服务器端产品。该技术提供了一个新的,基于标准的语言和编程模型,其编程模型支持常用的设计模式,能够使企业创建许多有吸引力的,交互的快速应用,争强了用户对网页的体验。传统网页游戏开发的局限是表现层受到一定的约束,而Flex技术能轻松地解决这一技术难题。网游Small World就是基于Flex技术开发的。
3)Ajax技术 Asynchronousjavascript and xml(Akax)意为“异步 JavaScript和XML”。Ajax是一种创建交互式网页应用的网页开发技术,它不是一个新的编程语言,而是一个编程技术。Ajax的自大优点就是能再吧刷新整个页面的前提下更新数据,使得Web应用程序更为迅速的响应用户的交互需求。
4)JSP技术Java ServerPages(JSP)是一种动态网页技术标准,它可在传统的网页HTML文件(*.htm,*.html)中插入java程序段和JSP标记,其生成的内容的逻辑被封装在标识和JavaBeans或者Enterprise JavaBeans TM组件)能够执行应用程序所要求的更为复杂的处理。由于Java在移植性、扩展性、多线程方面的特点使它成为目前网页游戏的开发语言。由Java技术开发的高端网页游戏,能处理各类与服务器的交互和复杂图形,开发大型网络游戏。
5)PHP技术 HypertextPreprocessor(PHP)意义“超级文本预处理语言”。PHP是一种在服务器端执行的嵌入HRML文档的脚本语言,风格类似C语言,应用广泛。PHP于CGI或Perl相比,能更快速地执行动态网页。PHP是将程序嵌入到HTML文档中去执行,跨平台性强,程序开发快,执行相率高,可编译以达到加密和优化代码,支持几乎所有流行的数据库,以及操作系统。
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)