如何学习基础游戏编程
-
学习游戏服务器编程的基础知识
江·
前段时间一直在给开发者灌输3D游戏引擎技术,包括游戏底层数据结构的封装,算法与游戏实战技术的视频课程分享,以及写一些利用算法解决游戏实际问题的文章。在向读者介绍3D游戏引擎的同时,还被问到如何学习游戏服务器编程技术。其实我也喜欢游戏服务器编程。在游戏开发过程中,游戏服务器开发的工作量要比客户端少得多,比如游戏开发后期客户端需要调整各种特效,更改UI。当然网上有很多开源的服务器代码,很多代码在Github上都可以找到,比如java,C#,C++,C,erlang,python等。很多人很迷茫,不知道该学哪种编程语言。服务器编程和开发也因地区而异。IT行业发展的中心是北京、上海、广州,他们对游戏服务器编程语言的要求也不一样。北京偏爱java编程,上海偏爱C++编程,广州偏爱二郎编程。这也告诉开发者,如果想去不同的地方,可以根据自己的需求来学习。这篇文章是告诉读者如何学习游戏服务器编程与开发。
我还是喜欢C++编程。其实语言只是一个方面,原则要明确。我来说说我学习服务器编程的经验。
学习游戏服务器编程也要分阶段进行。第一,学好基础。编程语言是必要的。可以熟练学习java、C++、C #和erlang中的任意一种,或者以c++为例。游戏编程中经常会用到一些宏定义或者模板定义。开发人员应该知道宏定义和模板定义的含义。STL模板中的对象,如Map、Dictionary、List、Vector等,在服务器开发中经常用到。网上有很多学习资料。另外,这里还需要讲一下数据结构。无论是在客户端还是服务器端开发,都会用到数据结构,比如哈希表、二叉树、队列、栈等。以上提到的都是语言所必需的。
如果你有扎实的语言基础,可以直接跳过这一阶段的学习,直接进入第二阶段。关于网络通信协议,例如,我们的TCP/IP协议分为七层。每一层的作用是什么?服务器传输常用的协议有几种,即Web使用的TCP协议、UDP协议、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是最基本的通讯方式。它在游戏中的服务器和客户端之间进行通信。以游戏登录为例。客户端首先创建一个Socket,然后将播放器的用户和密码、登录服务器的IP地址和端口号写入Socket并发送给服务器。服务器会监听。收到消息后,它会打开并读取套接字信息进行处理,比如验证信息的正确性。然后服务器创建一个套接字,将发送给客户端的消息写入套接字,并发送给客户端。客户端也会进行监听操作。客户端收到消息后,客户端打开套接字并读取消息。客户端和服务器之间的通信如下:
TCP/IP协议中有三次握手,通过三次握手可以建立可靠的连接。效果如下图所示:
在服务器端程序员的面试中经常会提到三次握手。在掌握了TCP/IP协议后,他将进入实战演练阶段,看看自己对网络的掌握程度。以Unity为例,可以学习TNet的超轻量级网络传输,因为它没有数据库,但是可以很好的验证学习到的TCP协议和Socket套接字,可以在此基础上尝试做一些消息传输。最后,你要学习MySql,服务器存储需要的数据库。
学习数据库的安装,创建新表、插入数据、删除数据、读取数据等数据库操作。掌握数据库后,需要通过游戏服务器编程来操作。建议先学习网上的PhontonServer,是用C #写的,方便开发者学习。此外还提供了Unity实现的Demo,方便开发者调试连接,熟悉Mysql。
以上知识也是服务器开发人员必备的。掌握了这些技术之后,继续提升的最好方式就是去公司,跟着项目走。在接下来的章节中,将向读者介绍如何搭建一个真实的游戏服务器,知名IT游戏公司的服务器架构设计和服务器负载均衡的设计,最后介绍如何搭建一个全局服务器。