服务器所用到的知识:TCP/UDP,最基本的;
并发——你可以选择使用select、poll,或者是多线程、多进程:如果你使用多线程,那么就必须使用同步技术——信号量、互斥体、条件变量的一种或几种,并且对于多线程技术,你还需要考虑使用进行线程分离与合并;
如果你使用了多进程,那么同步技术就不是你需要考虑的了,你需要考虑的是进程相关的问题了,你是使用fork还是vfork,你该如何处理客户端的请求,如何处理客户端断开连接后保证能够处理完数据并且没有僵尸进程产生,你还需要考虑高并发的问题;
你发送接受数据的时候,采用何种方式,是阻塞的还是非阻塞的,还有连接超时、重传等问题
你是选择TCP还是UDP,如果选择UDP你可得忙了,需要你自己去进行重传验证,模拟TCP的三次握手,保证数据不会丢失,保证数据的有序性;
还有其他很多需要你考虑的,以上都是指在Linux下的C++,本人对windows C++不了解。
推荐书目:UNIX高级环境编程,UNIX网络编程,卷一。C++只不过是你使用这些技术的方式,不管你使用C还是C++,你都可以使用从这两本书中学习到很多有用的知识,但是不能保证你就可以写出高质量的服务器程序。
以下一篇是以服务器为例的,希望对你有帮助。
-------------
学习游戏服务器编程基础篇
姜雪伟
前段时间,一直给开发者灌输学习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游戏公司的服务器架构设计以及服务器负载均衡的设计,最终会介绍如何搭建全球同服服务器。
服务器对于大部分人已经不再那么陌生,现在的公司用到服务器的情况很多,例如Web服务器、打印服务器都是我们日常接触的比较多的应用。而对于服务器的了解方面,很多人大概只停留在表面上,当作一个比较高级的电脑来看待。其实,服务器(什么是服务器)与办公PC之间的差别还是很大的,例如服务器能够7*24的持续工作,而如果是PC机的话,相信用不了多久机器性能就会大大减弱甚至报废。
服务器基础知识大全前些天一个做企业网管的同学跟我打电话诉苦,本来他是负责公司网络管理的,但是由于公司要搭建企业网站,购买服务器,结果他被老板安排负责服务器的购买和维护。可以如今刚买回来没多久的服务器却总是出现各种毛病,企业网站不能正常访问,让他苦不堪言,使得老板也不再信任他了。
上面的同学就是在没有完全了解服务器知识的情况下,购买的服务器与企业业务需求不符,造成企业业务不能正常运行。也许再给他一次机会,我想下他一定会好好补补自己的服务器知识了,充分了解服务器的注意事项,以免再出现现在的错误。
其实,如今随着办公设备的发展,人们购买和应用企业服务器的情况将会逐渐增多,了解服务器的各种性能对于在之后的采用及应用中将起到极其重要的作用。而这篇文章将详细的给大家介绍一下服务器的知识,包括服务器硬件、软件、网络、安全等多个方面,以便于大家能够比较清晰的了解服务器。
服务器硬件选购注意事项
服务器硬件:
只有良好的硬件系统,才能保证企业业务的持续运行,即使是你租用服务器,看不到具体的软件,也不能忽视服务器的硬件细节。当你购买服务器的时候,你要考虑服务器的处理能力,内存,存储的容量,和备份存储等因素,但并不是只注意这点就行了,你还应该考虑设备的安全功能,散热功能,环保责任,和网络基础设施。
一般服务器内部结构图我们购买的时候要注意具体的性能,不要被设备的名称代号所误导,例如,再购买的时候你回被告诉处理器的数量和赫兹,但是这并不代表个数多的性能就一定强,你应该尽量多参考,采用货比三家的方式来对比出服务器的性能高低。
除此之外,你还要考虑设备时候配备了冗余电源?使用拥有冷却功能?硬件是否能够支持热插拔?是否有地方不支持冗余备灾?你还要考虑他们的兼容性是否能满足企业需求?这些都你需要考虑的地方。而在服务器市场上,IBM,戴尔,惠普三家牢牢占据着我国的主流市场,而处理方面,则有Intel至强和AMD皓龙两种服务器CPU可选,目前Intel是主流市场的首选CPU,但AMD也拥有这良好的性价比。而国产服务器方面,浪潮,曙光,联想都拥有差不多的市场占有率,而且价钱方面更实惠,中小企业可以选购。
服务器操作系统的重要性
服务器操作系统:
服务器市场上的操作系统也有很多,他们都有着自己的优缺点,并不是所有系统都一样,但是你可以根据下面的几个方面来判断你需要选择什么样的系统:
1.你将使用的硬件类型
2.你需要安装的软件系统要求
3.你要使用的Web应用程序汇编语言和数据库
4.你的预算限制的软件
5.你服务器的目的和目标
目前市场上主流的操作系统有Windows、Linux和Unix,你需要根据你的需求去选择操作系统,例如你需要你个特定的软件,而这个软件支持在Windows系统上运行,这会限制你的选择,除非你使用虚拟化技术。而当你没有多少预算的时候,你可以选择开源的CentOS免费操作系统,如果你没有自己强大的维护能力,你也可以选择红帽企业版。
服务器系统:windows与linux系统网络方面:
现在我们来看一下服务器的网络基础设施,一般你作为你个管理员,你可能不需要考虑网络基础设施,但如果你是一个提供租赁服务器的公司,那么你就需要注意自己的网络了。
域名服务器注意事项:除非你自己拥有域名服务器,否则推荐你绑定两个服务器,一个主服务器,一个次服务器,保证至少一个能够及时响应。
反向DNS注意事项:每个服务器的DNS是你的网站在网上被识别的唯一标准,但不幸的是,某些服务器没有正确的DNS,这就需要你确保服务器的身份是否真实有效。
网络防火墙:一个安全的服务器应该有两个路由器和网络防火墙组成,我们不应该忽视任何一个,任何潜入你第一次防御的人将会被第二次防御阻止。
Web服务器软件选择很重要
Web服务器软件
随着网站的兴起,Web服务器的应用也越来越多,目前应用最广的是Apache HTTP服务器,是迄今为止使用最广泛的Web服务器软件,而且被公认为安全,可靠,扩展能力出色。
除此之外,我们还有很多服务器软件可以选择,例如微软的IIS,Nginx和lighttpd,也有由Apache衍生的一些小的Web服务器,你选择Web服务器可以根据下面的因素:
1.使用Web服务器和编程代码的选择
2.你使用的操作系统(例如IIS只能在Windows操作系统运行)
3.你网站每天的流量
4.你需要的功能和可扩展的深度
微软IIS7 各种Web服务器软件可能都声称在速度和安全性方面比别人有优势,但很多是根据自己的配置和应用程序的性能。大家在选择的时候一定要慎重,不要被商家迷惑。
其它服务器软件
选择你的操作系统和Web软件,仅仅是个开始。如果你需要一个专用的服务器,建立自己需要的服务器,你需要选择一些指定的服务器软件,例如,数据库服务器,DNS,邮件服务器,防火墙,虚拟化等等。
DNS:域名服务器的管理是至关重要的,你以任何方式连接你的服务器到互联网是不同的,Windows,Linux和Unix是有区别的。
数据库服务器:数据库的使用情况差别很大,在决定使用软件之前,你需要觉得数据库的类型。你可以选择是关系型数据库还是非关系型数据库,这两个类别内部有无数个变化。例如你选择的是关系型数据库,你可以选择功能强大的MySQL数据库服务器,也可以选择功能简单的SQLite。
脚本语言:动态Web脚本可以使用几乎所以的脚本语言,有人甚至可以在同一个应用程序中使用多种语言,PHP是目前非常流行的语言。而Jave也在应用中可能遇到。其他语言:Linux发行版可能更容易来决定软件,因为其中许多人用他们自己的一套包来工作。你可以混合和匹配不同的软件,建立你的理想服务器。
网络与操作系统安全基础
网络安全基础
为了保护服务器的安全,你可以需要选择一下不同的防火墙。目前网络受到攻击现象非常普遍,所有攻击都集中在网络上的端口,例如网络罪犯利用你个开放的工具扫描你的服务器的开放端口,然后利用该端口进行攻击。
服务器安全防护理想的`情况有两种利用防火墙的方法:是路由器和服务器本身,路由器防火墙通常会关闭你服务器不使用的端口,甚至可能防止一些具体的攻击,而服务器本身的防火墙软件能够进一步的防护服务器安全,从而进一步的防护特定的危险。
服务器安全-网络防火墙Linux服务器受攻击现象则比较少,但是仍然时有发生,你可以配置iptables内核防火墙,APF则是另一种人们比较喜喜好的防火墙,更容易配置。
操作系统的安全
操作系统的安全是非常复杂的,这是一个大的软件集合,能够直接访问硬件,因此保护服务器操作系统的安全尤为重要。
你需要时常做到一下几点:
1.更新内核,Linux的内核是服务器操作系统的核心,当他受到攻击的时候可以使服务器整体瘫痪,保持内核更新和安全很重要。
2.漏洞扫描,定期扫描你的服务器的漏洞,进行修补。
3.密码强度,听起来你可能觉得微不足道,但是弱口令往往是服务器被攻击的元凶,确保密码的强度大,强制用户的密码强度。
4.文件的安全性,服务器的文件安全要十分重视,当你把带病毒的文件放在服务器里面,可以说为你的服务器打开了一个大口子。
5.文件权限,如果用户不应该访问一个文件的权限,他就应该被限制,要分清文件是可读还是可写的。
应用程序的安全性
涉及到应用程序的安全性,你应该考虑下面的三种情况:
1.标准的应用程序,只有当你需要的时候,你才能安装在服务器操作系统中。例如服务器操作系统一般不会需要暴风影音或音乐播放软件。
2.杀毒及防火墙程序应设置自动开始启动。
3.Web应用程序与服务器端脚本,你需要根据实际需求确定。
而且,对于标准的应用程序来说,你要保证时常的更新,以确保他们为最新的版本,实时更新安全修复程序,以避免不必要的安全漏洞。保护程序也要时常更新,如果你用的是Linux系统,那么保护程序不应该在ROOT用户下运行,这样是非常不安全的,你应该创建一个特殊的帐号来运行保护程序。Web应用程序以及脚本语言应当检查漏洞,并经常更新。你也应该考虑使用应用程序防火墙添加另一层安全。
文件系统
Unix和Linux服务器比Windows服务器更容易被提到,所以你应该熟悉自己的服务器的文件系统,文件系统采用斜线来隔开,就想网址格式一样,你的首页目录可以看起来像/home/user/web/docs,而不是F:homeuserwebdocs。
文件系统结构Linux和Unix文件系统的另一个独特功能就是文件往往不具备扩展性,例如,命令“grep”的文件确实是不带扩展名的“grep”的字。在Windows上,它可能会是“grep.exe”。对于网络,大多数的文件仍然有扩展(即HTML,JPG,和OGG)。
简介Windows与Linux区别
对于目前中小企业用户来说,用的最多的是Windows和Linux用户,这里给大家介绍一下他们的优缺点,这不是一个说使用Linux或者Window操作系统的文章,只是衡量一下每款Linux或者Window操作系统的优势,以便我们能对安装何种操作系统做出明智的决定。
Linux操作系统
价格--Linux操作系统的价格更加低廉,因为它是开放源码的,这就意味着你可以安装操作系统中所有的选项。Linux操作系统能吸引大量的服务器管理员,因为它无需软件的许可证授权费用。
脚本支持--Linux可以支持PHP,MySQL和Perl等应用,而另一方面Windows系统则也可以支持这些语言。如果你打算或者正在你的网站上使用这些脚本或者代码,那么使用Windows操作系统在某些方面上并不十分突出,脚本在不同平台上不是都兼容的。
Linux系统转化--很多服务器技术人员在将他们的网站在Windows上进行转换会碰到一些Linux软件不会遭遇的问题。但是将网站转化为Windows平台是比较简单和灵活的。
Windows操作系统
价格--由于Windows系统不是开源操作系统,因此价格比Linux系统要贵的多。根据你决定使用的操作系统类型不同,需要花费数百到数千美元不等。
.NET技术支持--微软开发的。NET技术是很有意义的,Windows操作系统可以为其提供支持。另一方面Linux系统则无法支持。NET技术。支持微软数据库--基于专用服务器的Windows操作系统可以支持Microsoft Access或者Microsoft SQL.这些数据库在Linux专用服务器下是无法运行的。
Windows操作系统为了判断那款操作系统适用于你的专用服务器,认真规划好网站的研发和布局是至关重要的。制定好你要在硬件和每月费用上花费的预算。在Linux和Windows操作系统之间进行选择确实是个个人偏好的问题,咨询你的研发人员来了解那种代码语言更加适合使用是最好的。请记住如果你决定使用Windows操作系统,你需要为许可证授权支付更多的费用。
全文小结:综合上面的各个方面我们能看出其实选择一个适合企业的服务器还是非常难的,当企业选择服务器的时候,尽量咨询专业人士,考虑周全,而且在购买的时候尽量选择售后服务好的企业,这样即使以后出现问题,也能够及时解决。例如IBM,惠普,戴尔,联想,浪潮,曙光等企业的服务器在市场上都有非常不错的口碑,值得信赖!
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)