以下一篇是以服务器为例的,希望对你有帮助。
-------------
学习游戏服务器编程基础篇
姜雪伟
前段时间,一直给开发者灌输学习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使用的>
应用层:TFTP,>
传输层: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 什么是服务器虚拟化服务器虚拟化是指在单个物理服务器上运行多个相互独立的 *** 作系统的一种技术。通过虚拟化软件将单个物理服务器划分为多个虚拟机。每个虚拟机都能共享物理主机上的物理资源,包括CPU、内存、磁盘和网络资源等。作为一种主流应用技术,越来越多的组织机构都已经或者正在实施服务器虚拟化,它可以帮助节省投资、增加资源利用率,对现有基础设施无需重大变更就可以提高IT响应速度和灵活性。2 服务器虚拟化技术的优势
① 提高服务器利用率:大部分服务器的利用率仅为全部性能的三分之一甚至更少,通过将多个工作负荷整合至一台服务器上,可以实现更高的资源利用率。
② 提高业务持续性:业务持续性对系统可靠性提出了更高要求,服务器虚拟化技术强大的容错、灾备、快速恢复特性,可以提高系统可靠性,从而维持业务持续性。
③ 动态资源调配:服务器虚拟化可以实时自动平衡工作负载。通过实时迁移功能,资源调配工具可以将运行中的虚拟机在线迁移至拥有更多资源的其他服务器上,或者灵活调整其他虚拟机,从而匹配工作负载,实现业务和资源最优化。
3 利用服务器虚拟化的几种情况
31 优化已退出业务应用但仍需保持在线的系统
随着业务不断发展,一些系统已不再适用,新系统取而代之,一般的做法是数据迁移至新系统,旧系统下线,但也有一些情况并不迁移数据,旧系统维持在线作为历史查阅之用。对于这样的情况,由于对服务能力要求的大幅降低,继续保持旧系统运行会造成一定的资源浪费,此时便可以将其虚拟化,整合多个业务到一个物理服务器中集中运行,从而降低综合运维成本。
32 迁移运维困难的旧系统
一个应用系统也许会持续使用多年,硬件设备随时间推移逐渐老化,由于厂商服务及备件问题,后期运维成本逐渐增大以致无法维持,而随着硬件技术的发展和 *** 作系统更新,新的服务器却可能因兼容性而无法使用,为解决这一矛盾,利用虚拟化软件的兼容性,将新服务器虚拟化之后,模拟原运行环境,部署旧系统和应用,使之得以延续生命周期。
33 利用计算能力强的新硬件,整合多个旧系统
每个系统对服务器性能都有一定要求,而随着技术的发展,新硬件的计算能力大幅提高,远超出旧系统的需求,如果在更新服务器时,同时利用虚拟化将多个旧系统装入一个物理服务器中,通过合理调配虚拟机资源,可以保证在节省空间、节约电力,节约投资的同时又满足多系统并存对资源的需求。
34 软件开发和测试环境
通过服务器虚拟化,可以以较低的成本,快速创建和复制特定类型的软硬件环境,用于软件开发和测试。同时虚拟机的快照和快速恢复特性也非常适合于此类环境的工作要求。
35 提高服务的安全性
通过服务器虚拟化,将相同类型的一组服务,根据不同的服务对象或业务需要,部署同一物理主机的在不同的虚拟机中,使服务之间相互隔离,互不影响,从而提高服务的可靠性和安全性。
4 服务器虚拟化的常用软件
41 Microsoft Hpyer-V
Hyper-V是微软伴随Windows Server 2008推出的服务器虚拟化解决方案,采用了全新的64位微内核管理程序架构,让Hyper-V在性能和安全性上都有较大提高。利用新的虚拟服务程序/虚拟服务客户端(VSP/VSC)架构使磁盘、网络等核心资源的访问利用得到改善。Hyper-V支持不同类型的(例如Windows、Linux及其他 *** 作系统)32位和64位 *** 作系统,具有非常好的硬件兼容性,但Hyper-V要求处理器必须支持AMD-V或者Intel VT技术。
42 VMware ESX server
ESX server是当前服务器市场上最成熟,最流行的虚拟服务器产品。是适用于任何系统环境的高效灵活的企业级虚拟主机平台,对比其他虚拟软件产品,ESX的最大优点是可以极大减少宿主系统所占用资源,其内核直接运行在硬件之上,系统稳定性和性能都有很大的提高。其大型机级别的架构提供了空前的性能和资源控制特性,适合各种要求严格的应用程序的需要。同样VMware ESX Server需要处理器支持硬件辅助虚拟化技术才可以更加有效地运行。
43 Citrix XenServer
XenServer作为一种开放的、功能强大的服务器虚拟化系统,能够为任何服务器和数据中心虚拟化项目提供所有关键特性,强大的可扩展性支持任何规模的企业,满足Windows和Linux系列的 *** 作系统以及复杂的存储需求。XenServer基于开源的Xen系统管理程序,直接运行在服务器硬件上,作为准虚拟化技术的代表,其响应能力基本接近未经虚拟化处理的物理服务器,可以以较低的部署成本实现最佳的性能和可扩展性。
5 服务器虚拟化之后的常见问题
51 单点故障风险
虚拟化最大的优势就是服务器整合,节省运营成本,但这对用户来说也意味着要将所有的鸡蛋放在一个篮子里,增加了风险。过去在多台物理服务器上运行不同的工作负载,当其中一台服务器宕机时,不至于所有工作负载都停止运行。而在虚拟化环境里,一旦物理服务器故障宕机,就意味着所有该服务器承载的工作负载(虚拟机)都会陷入瘫痪,若不能及时恢复将给企业带来灾难性的后果。因此应设立额外的冗余物理服务器,当某一物理服务器出现故障,通过虚拟化软件的在线迁移工具将其对应的工作负载及时动态迁移到别的物理服务器上,虽然增加了虚拟化成本,但可以有效避免全部虚拟服务器崩溃的风险。
52 潜在安全风险
和很多技术方案一样,服务器虚拟化由于系统架构固有特点决定了在安全方面存在一定的潜在风险。当不同的工作负载在虚拟机上运行的时候,作为宿主的物理主机的安全变得更为重要。如果一个未经授权的用户获取了宿主 *** 作系统的访问权限,便有可能复制敏感数据或破获整个虚拟机系统。同时也可以关闭虚拟机或进行宿主机层面的重新配置,从而造成严重的服务中断。对于访问者而言虚拟服务器和物理服务器没有区别,同样面临被人恶意攻击的风险,一旦一台有漏洞的虚拟机被攻陷,安全威胁就可以透过网络扩散到其它虚拟机,从未威胁整个虚拟机管理系统。物理服务器作为虚拟服务器的根本,保护其稳定安全,是安全防范工作的重中之重。虚拟机环境下,病毒和恶意软件的影响很可能是同一台物理服务器上的所有虚拟工作负载,而不仅仅是一个单独的虚拟机,会给系统资源造成相当大的负荷。另外关于病毒防护,一般做法是将每个独立虚拟机单独安装病毒防护软件,这样将导致总体消耗的系统资源非常巨大,如果能采用专门应用于虚拟化平台的安全防护软件效果可能会更好。
53 I/O瓶颈和数据备份
相对于计算能力,存储性能增长的速度明显要慢得多。对于虚拟化而言,I/O瓶颈和缓慢的存储性能成为一大难题。高密度的虚拟化产生大量I/O流导致物理硬盘的频繁 *** 作,极大增加了磁盘工作负载,并且缓存对性能的提升效果也越来越有限。服务器虚拟化环境下,如果仍然使用传统备份方法来保护数据将是得不偿失的,在一台物理服务器上同时进行多个虚拟机数据备份时,备份任务将对服务器硬件资源进行激烈争夺,同时虚拟机的工作负载迁移工具会使得备份问题变得更加复杂。因此每台虚拟服务器,都必需实施相应的备份策略,对配置文件、虚拟机文件及其中的重要数据都要进行备份。预留一定的服务器资源用于备份任务,安排合理完善的备份计划,合理利用虚拟机快照工具有助于改善这一状况。
6 结语
近几年,服务器虚拟化已被广大用户所接受,它将固定不变的硬件设备转化为可以动态管理的“资源池”,从而提高资源的利用率,简化管理,提高系统可用性,节约投资,降低综合运维成本,增强IT对业务的变化的适应力,所有这些对用户都是真实的利益所在。任何一种技术都会有优势和劣势,但是随着技术的不断进步,相信虚拟化应用过程中出现的各种不足和问题都会得以改进和解决。
参考文献:
[1]郝勇、许秀文、杨铭,浅谈服务器虚拟化[J]中国管理信息化,2011(04)
[2]韩寓,服务器虚拟化技术研究与分析[J]电脑知识与技术,2011(07)
从开发平台到服务器的向上适化
适化概述
所谓适化就是将桌面应用转化为Client/Server应用
适化是一个很复杂的主题 这里不详细讲述 本节将介绍适化Delphi 应用程序中最重要的方面
适化的主要方面有
● 将数据库从桌面平台到服务器的适化
● 将应用程序转化为Client/Server的适化
适化还需要实现从桌面环境到Client/Server环境的转化
桌面数据库和SQL服务器数据库在许多方面有不同之处 例如
● 桌面数据库用于同一时刻单用户的访问 而服务器用于多用户访问
● 桌面数据库是面向记录的 而服务器是面向集合的
● 桌面数据库将每个表存储在独立的文件中 而服务器将所有的表存储在数据库中Client/Server应用必须解决更新的问题 最复杂的是联接 网络和事务控制
适化数据库
适化数据库包含下列步骤
● 在桌面数据库结构的基础上 定义服务器上的元数据
● 将数据从桌面转化到服务器中
● 解决下列问题
● 数据类型差异
● 数据安全性和完整性
● 事务控制
● 数据访问权
● 数据合法性
● 锁定
Delphi提供了两种方法适化一个数据库
● 使用Database Desktop工具 选择菜单Tools/Utilities/Copy to命令将数据库表从桌面方式拷贝到SQL格式
● 建立应用TBatchMove部件的应用程序
这两种方法都可以将表结构和数据从桌面数据源转化到服务器上 依靠这些数据库 可能需要改变结果表 例如 可能想进行不同数据类型的映射
也可以将下列特征加入数据库
● 完整性约束
● 索引
● 检测约束
● 存储过程和触发器
● 其它服务器特征
如果用SQL脚本和服务器数据定义工具定义元数据会更有效 然后用前面介绍的两种方法转移数据 因为如果是手工定义数据库表 Database Desktop和TBatchMove 部件将只拷贝数据
适化应用程序
在理论上 设计用来访问局部数据的Delphi应用程序做很少的修改就可以访问远程服务器上的数据 如果在服务器上定义适合的数据源 你就能将应用程序指向访问它 这只需简单地改变应用程序中TTable或TQuery部件的DatabaseName属性
实际上 在访问局部和过程数据源之间有许多重要的不同之处 Client/Server应用程序必须解决大量的在桌面应用中所没有的问题
任何Delphi应用程序都能用TTable或TQuery部件访问数据 桌面应用程序通常都是使用TTable部件 当适化到SQL服务器上时 用TQuery会更有效 如果应用程序要检索大量记录 则TQuery部件要略胜一筹
如果应用程序使用统计或数学函数 那么在服务器上通过存储过程执行这些函数会更有效 因为存储过程执行更快 使用存储过程还可以减少网络负载 特别是大量行数据的函数
例如 计算大量记录的标准差
● 如果该函数在客户端执行 所有的值从服务器上检索出来并送到客户端 导致网络拥塞
● 如果该函数在服务器端执行 则应用程序只需要服务器上的答案
Delphi客户/服务器应用实例分析
本节中采用的实例是Delphi 数据库的例子CSDEMO CSDEMO是Delphi客户/服务器编程的示例程序 它采用的数据库服务器是Local InterBase Server
CSDEMO较好地示范了BDE环境的配置 InterBASE Server高级功能应用 SQL服务器联接 触发器应用 存储过程编程和事务控制技术等 具有较高的参考价值 本节讲述下列内容
● 数据库环境介绍
● TDatabase的应用
● 不同数据库表的切换
● 触发器编程
● 存储过程编程
● 事务控制应用
数据库环境介绍
本例中采用的数据库服务器是Local InterBase Server Local InterBase是InterBase Server的单用户版 位 兼容ANSI SQL Local InterBase支持客户/服务器应用在单机上的开发和测试 并且可以很容易地适化到InterBase Server上 因此 开发客户/服务器应用采用Local InterBase作为原型开发环境是很方便的
IBLOCAL的BDE参数
本例中的SQL数据库是IBLOCAL 它是由BDE配置工具(BDECFG EXE)设置参数值 它的各项参数值列于下表
表 IBLOCAL的各项参数值
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
参 数 名 参 数 值
────────────────────────────────────
TYPE INTRBASE
PATH
SERVER NAME C:\INTRBASE\EXAMPLES\EMPLOYEE GDB
USER NAME SYSDBA
OPEN MODE READ/WRITE
SCHEMA CACHE SIZE
LANGDRIVER
SQLQRYMODE
SQLPASSTHRU MODE SHARED AUTOMIT
SCHEMA CHCHE TIME
MAX ROWS
BATCH COUNT
ENABLE SCHEMA CACHE FALSE
SCHEMA CACHE DIR
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
数据库结构介绍
IBLOCAL数据库的结构都是由InterBase服务器工具交互式SQL工具(ISQL)定义的
用ISQL定义数据库 首先要用Create Database命令建立数据库 建立的新数据库一般是以GDB为扩展名 建立好后 就可以用SQL语言定义数据库表 例如建立EMPLOYEE表的SQL语句如下
定义域名数据类型
CREATE DOMAIN FIRSTNAME AS VARCHAR( )
CREATE DOMAIN LASTNAME AS VARCHAR( )
CREATE DOMAIN COUNTRYNAME AS VARCHAR( )
CREATE DOMAIN EMPNO AS SMALLINT;
CREATE DOMAIN DEPTNO AS CHAR( )
CHECK (VALUE = OR (VALUE > AND VALUE <= ) OR VALUE IS NULL)
CREATE DOMAIN JOBCODE AS VARCHAR( )
CHECK (VALUE > )
CREATE DOMAIN JOBGRADE AS SMALLINT
CHECK (VALUE BEEEN AND )
CREATE DOMAIN SALARY AS NUMERIC( )
DEFAULT
CHECK (VALUE > )
建立EMPLOYEE表
lishixinzhi/Article/program/Delphi/201311/25125
很多朋友都对学习路线问题感到迷茫,特别是还在上学的朋友们。在这里就详细的介绍一下。
1Java基础很多朋友一上手就开始学习Android,似乎太着急了一些。Android应用程序开发是以Java语言为基础的,所以没有扎实的Java基础知识,只是机械的照抄别人的代码,是没有任何意义的。那么Java学到什么程度才算是过关呢?
至少要掌握以下两个方面的内容:
a)Java基础语法:具体的知识点列表可以在这里下载:《Java知识点列表》V10。这部分内容没有讨价还价的余地,必须烂熟于胸。至于具体的学习方法,可以看书或者是看视频,但是关键是要多加练习,无论是书上的练习还是视频里面的练习,都需要仔仔细细的完成;
b)设计模式:由于在Android系统的框架层当中,使用了大量的设计模式,如果没有这个方面的知识,对于Android的理解就会大打折扣。设计模式的种类非常之多,一个一个的全部掌握,是不现实的,必须首先掌握面向对象的基础设计原则,有了这些基础原则的支持,就可以举一反三。这部分内容可以在《EffectiveJava》和《AgileSoftwareDevelopment:Principles,PatternsandPractices》这两本书中找到。
2Linux基础知识:大家都知道,Android系统的基础是Linux *** 作系统。在开发过程当中,也需要使用到一些Linux命令。所以说一些Linux的基础知识是必须的(话说现在的程序员,不懂Linux都不好意思跟人家打招呼),推荐大家看看《鸟哥的私房菜》这本书,写的相当不错;
3数据库基础知识这个比较简单,就是一个增删改查的数据库 *** 作,可以看一下这本书:《SQL编程练习与解答》
4网络协议至少需要学习两种基础的协议,>
产品经理必学的五个锦囊妙计
产品方法产品思维产品设计交互体验
5Android基础知识有了以上的铺垫,再来看Android,是不是觉得轻松了很多呢?至于基础知识的学习顺序,最好的方法就是按照AndroidSDK帮助文档当中的DevGuide里面的顺序,我的《Android视频教程》也基本上是按照这个顺序录制的;
6服务器端开发知识:由于很多Android应用程序都需要服务器端的支持,所以掌握一些服务器端开发知识还是非常有必要的。至于选择哪一种服务器端知识进行学习,就比较麻烦了,因为技术的种类实在是太多了:
a)JavaEE:就是上面邮件当中所提到的SSH—StrutsSpringHibernate。这种技术的优点的功能完整、强大,已经使用了很多年,而且既然大家已经非常熟悉Java了,那么学习SSH看起来也顺理成章。但是使用这种技术开发服务器端程序,非常麻烦。即使是一些简单的功能,也可能需要大量的代码和配置文件来实现;
b)PHP:简单易学,开发快速。但是需要多学一种语言,是否得不偿失,就要自己判断了;
c)NET:这项技术的特点和JavaEE差不多,但是要想掌握NET,则需要掌握c#,也是个麻烦的事情;
d)rubyonrails:这是个人最喜欢的服务器端技术,简洁,优雅,寥寥几行代码,就可以实现很复杂的功能,但是这需要Ruby语言知识作为基础;至于选择哪一种技术,就看自己的判断了。
育知同创教育提示:要成为一个专业的Android开发者,以上的这些知识都必不可少。看起来好像很多,多的可怕。所以还是那句话--“耐心,耐心很重要”。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)