精华内容
下载资源
问答
  • 2022-03-03 16:38:32

    从事游戏服务器开发,下面是一些需要掌握的技术栈。

    从熟悉到深入,各个阶段各有侧重。

    抛砖引玉,可用于查漏补缺,或者建议大家可作为平时的学习计划来规划。

    编程基础


    语言基础

    C/C++、Golang、Java、Python、Rust等

    版控系统

    SVN、Git等

    数据结构

    数组、列表、队列、Map、堆栈等

    基础算法

    排序、查找、遍历等

    设计模式

    工厂模式、命令模式、单例模式、观察者模式、策略模式等

    高级编程


    语言特性

    系统相关:如多线程、锁、定时器、socket接口、内存管理、性能陷阱等

    语言相关:语言版本特性、语言库、语法糖、工程编译、反射、并发、继承、泛型等

    汇编相关:汇编、调试、指令集

    复杂算法

    链表、平衡树、红黑树、B+树、图、哈希表、跳表、A*等

    语言规范

    编程风格、命名规则、语言坑点、编程范式、编程模式等

    软件工程

    软件生命周期、瀑布模型、快速原型、迭代模型、增量模型、敏捷开发、内聚耦合等

    计算机系统


    操作系统

    Linux(RedHat、CentOS、Unbuntu)、FreeBSD、macOS等

    硬件系统

    组成原理、磁盘阵列、云存储等

    应用系统

    文件系统、网络系统、存储系统、Shell编程等

    网络基础

    TCP/IP协议、系统调用、IO模型等

    技术架构


    网络库

    Epoll、Libevent、Libuv、Muduo、gev等

    数据库基础

    Redis、MySQL、MongoDB、PostgreSQL、Leveldb、MemCache、SSDB、HBase、TiDB等

    基础架构

    游戏服、跨服、战斗服、充值服、网关、日志系统、监控系统、gm系统、服务发现、负载均衡等

    高级架构

    微服务、云原生、容器化、大数据、机器学习、分布式消息、ORM/DAO

    更多相关内容
  • 游戏服务器开发都要学什么

    万次阅读 多人点赞 2019-08-22 17:26:27
    一,游戏服务器开发工作介绍 近来遇到有很多人想从其它开发领域转到游戏服务器开发行业上来,他们或许觉得游戏服务器开发工资高,或许觉得做游戏服务器需要掌握的技术更高级,可以锻炼自己,或许觉得想换个环境等等...

    一,游戏服务器开发工作介绍

    近来遇到有很多人想从其它开发领域转到游戏服务器开发行业上来,他们或许觉得游戏服务器开发工资高,或许觉得做游戏服务器需要掌握的技术更高级,可以锻炼自己,或许觉得想换个环境等等。不管出于什么原因吧,做为一名几年的游戏服务器开发者,当然是持欢迎态度的,那么我就先介绍一下游戏服务器开发的工作吧,游戏服务器开发具体要做哪些工作呢?

    1,团队沟通

    基本上不管做什么开发,都是一个团队来完成的,游戏也是如此,游戏团队一般由老板,总经理,CTO(技术主管),主策划(领导一些人,包括数值策划,系统策划,特效策划),主美(领导一些人,包括原画,UI设计,特效动作设计),客户端主程(领导一些人,客户端程序员,客户端程序员...),服务器主程(领导一些人,包括服务器程序员,服务器程序员),外加运维。而游戏的大部分逻辑实现与逻辑数据验证都会放在服务器端,所以服务端程序需要明确了解策划的需求,要了解就需要沟通,沟通方式的正确与否,直接关系到功能的实现是否正确,由于游戏逻辑的复杂性,单纯的文档描述可能不会非常完整,不像其它行业需求文档就几百页,详细的图文并茂,制定好之后也很少变化。所以做为一名游戏程序员,一定要有良好的沟通方式和技巧。

    2,架构设计

    这个架构设计就像盖房子打基础,基础好,房子就稳固,基础不好,房子高了就容易倒。架构设计需要结合软件工程学来搞,它需要对服务器的整个流程有足够的了解,对需求的变化有足够的认识。架构的设计一般有几个特性。

    首先是易用性,架构一旦完成,在开发的时候就要方便使用,比如网络通信架构,设计好之后,其他开发者就不需要关心客户端的数据是怎么被传输到服务器端的,这个时候对于服务器开发者来说,只需要实现一些简单的接口,就可以直接对客户端发送来的请求进行处理操作。再比如说服务器端数据的存储与更新,开发者只需要写少量SQL语句或基本不用写,都由架构的底层代码完成,开发者只需要调用封装好的API,就可以把数据存入数据库而不用关心数据的最终流向,只需要关心实现逻辑就可以了。

    第二,可扩展性,可扩展性包括两个方面,一是代码的可扩展性,比如说游戏中的任务处理吧,一个游戏中任务可能有几十种,而且还可能不定时的增加,为了判断不同的任务类型该执行什么操作,最简单也是最差的写法是if else,想象一下,一个方法里面,有几十个if else,这简单是bug的理想诞生地呀。一种可行的做法是使用责任链模式(具体的请参考设计模式的实现),这样每种任务都有一个单独的类去处理它,而不会影响其它的类,符合开闭原则,相互关联少,越少越不容易出bug。二是部署的可扩展性,比如,如果在线人数突然增加或预期可能要增加,一台物理机器可能处理不过来这么多的请求,那怎么办?那就需要支持在不影响其它服务器运行的情况下,可以动态的添加机器。而当压力降低之后,又可以移除某些机器,合理利用资源。

    第三,高吞吐量,这个是指能尽量最大化的利用计算机固定的资源,去处理更多的请求,更快速的响应客户端。这就需要在服务器架构设计的时候考虑异步处理,减少IO等待时间(比如请求redis,存储数据库,和其它服务器通信)以及数据缓存。说到异步,一定会涉及到多线程,并发等相关的技术,所以架构设计的时候需要对这部分知识有足够的了解。

    第四,要考虑是否所有的功能模块都放在同一个进程中。也就是需不需要分布式开发,哪些功能需要单独拿出来。对于手机游戏来说,一般要求同时在线量比较小,功能比较单一,所有功能都在一个进程中,人数大量同时在线时,可以多部署几组进程。而对于大型网页游戏或客户端游戏来说,特别是有些大区或不分区的情况,单个功能访问量大,服务器就要考虑分布式部署开发了。

    架构设计一般需要有经验的开发者(项目主程)去搭建,新手可以做为了解,在接触到项目之后,可以按这个思路去理解项目的架构是怎么样构成的,如果让自己来做,能否模仿出来,有时间可以自己尝试去独立设计架构,锻炼自己的能力,为将来自己带项目做主程做好充值准备,机会都是留给有准备之人的。

     

    3,逻辑开发

    架构搭建完成之后,紧接着就是游戏服务器的逻辑开发,这时才开始真正去实现游戏需要的内容,比如注册,登陆,任务,活动,背包,组队战斗等。由于游戏逻辑可能需要的判断条件多,组合变化多,所以在游戏逻辑开发过程中,你会慢慢发现面向对象的重要性。逻辑开发是一个任重而道远的过程,同一个问题,可能有很多种实现方式,不同的实现方式对效率和吞吐量有很大的影响,所以就需要对需求功能的理解要深入,不同功能之间的关联要明确。对常用的设计模式要知道如何使用。比如像上面说的替换数量比较多的if else的方式。逻辑开发需要谨慎细心,而且一定要自己测试才可以,不然bug在不知不觉中就产生了。

    4,系统周边开发

    一个游戏成功的运营,需要很多服务去支持它,比如sdk接入,充值接入,日志统计,游戏运行管理系统(一般叫后台管理系统,是内部人员为了管理游戏的而开发的系统)。比如修改某个用户的等级,封号等。管理系统一般会用web开发,与游戏服务器通信。

     

     

    二,游戏类型与技术选择

    游戏服务器开发使用的技术取决于游戏的类型,不同的游戏类型,需要的游戏环境不一样,所使用的技术也不一样。但是在本质上都是一样的,都是面对数据,处理数据,不同的是面对的数量大小而已。

    1,PC类端游

    这类游戏在线人数庞大,游戏中要处理的数据也非常庞大。所以对服务器性能要求非常高,一般都是采用C++做为开发语言,C++可以直接操作内存数据,与操作系统直接交互,减少数据之间的复制,它运行效率高,处理速度快,是这类游戏开发的首选开发语言。服务器端采用分布式架构,把不同的模块分散在多台物理机上处理。需要学习的大致有C++编程,Linux网络编程、TCP/IP通讯协议、多线程编程再加数据库。它一般开发周期比较长,一个游戏的上线基本上需要三到五年。

    2,网页游戏

    这类游戏相对于端游来说,开发周期短,因为是网页游戏,游戏的界面展示依赖于网络传输,所在在画面和特效上会次于客户端游戏很多。游戏的特点主要集中在游戏的玩法上。但是对于服务器端来说,和端游类是差不多是一样的,有些公司之前是做端游的,他们就直接把端游的服务器架构拿来就可以使用,以完成快速开发。

    3,手机游戏

    手机类游戏目前是最火最热门的游戏,因为他的用户量大,用户占有时间长。但是手机游戏大多数是一般小游戏,功能简单,玩法单一,一般都是休闲娱乐的。现在也有一些稍微大型的MORPG游戏。所以手机游戏开发周期更短,上线更快。

    目前,游戏市场竞争激烈,当前服务器主流的开发语言是C++和Java,但是C++学习难度大,开发速度慢。为了满足游戏服务器快速开发,快速上线,所以一般来说我们都是使用Java语言来开发服务器。近年来,随着游戏市场的发展,游戏服务器开发技术因Java而生成了一套体系。可以供开发者选择。

     

    三,使用Java开发服务器需要学习什么

    Java语言,由于学习成本低,开发速度快,稳定性高,开源框架多,目前已成为网页游戏和手机游戏服务器开发的主要语言。咱们从系统的开发流程简单梳理一下服务器开发需要用到的技术。

    1,网络通信

    这个是首要实现的,如果没有网络通信,就没有服务器存在的必要了。网络通信就需要建立网络连接。目前网络通信有两种方式,一种是短连接,比如http,一种是长连接,比如socket,当然http也是基于socket的,socket是通信的基础。所以要对tcp/ip通信的知识有所了解,明白通信的原理。基于这两种网络通信,游戏服务器也分为两种,弱联网和强联网。弱联网的游戏一般是指一些小型的游戏,比如开心消消乐,连连看,以及一些卡牌养成类游戏,这类游戏一般几秒钟或几分钟再会与服务器同步一次数据,一般会使用短连接。而像一些arpg游戏,实时战斗类游戏,以及带同屏显示玩家的游戏,这类游戏与服务器交互信息频繁,一秒钟可能几十次,会采用长连接,避免每次连接重新建立消耗系统资源,提高通信效率。

    为了网络通信的效率,服务器要使用NIO(非阻塞网络通信)通信。它能支持大并发连接。Java NIO是多路复用IO,在多路复用IO模型中,会有一个线程不断去轮询多个socket的状态,只有当socket真正有读写事件时,才真正调用实际的IO读写操作。因为在多路复用IO模型中,只需要使用一个线程就可以管理多个socket,系统不需要建立新的进程或者线程,也不必维护这些线程和进程,并且只有在真正有socket读写事件进行时,才会使用IO资源,所以它大大减少了资源占用。目前基于此技术有很多开源框架,目前最热门的NIO异步网络通信框架是Netty,它目前已被应用到种大型的开源软件之后,比如RPC调用,阿里云的消 息队列组件RocketMQ,Spring cloud的网关组件也是用Netty实现的。为了便于新手学习,可以参考这个单服游戏服务器框:https://gitee.com/wgslucky/xinyue-alone-game-server  ,此开源框架实现了游戏服务器开发中常见的基本功能,比如网络通信,消息序列化与反序列化,逻辑处理,多线程封装,消息广播,消息加密解密,消息压缩与解压,连接管理,断包与粘包处理等。

    所以在网络通信这一块,如果是弱联网游戏,可以使用web那一套来开发游戏服务器,需要学习的技术一般有http原理,Json格式协议,servlet,Tomcat(也可以是其它web容器),spring等。如果是强联网游戏,要学习的技术有Netty或Mina可以选择一种,多线程以及线程池的应用。这是网络通信所必须掌握的。只要能把客户端发送的信息接收到,并解析成代码使用的明文,就是成功了一半了,剩下的事就是把代码封装好,方便逻辑开发调用!

    通信这块还要考虑消息的并发,长连接情况下,怎么处理断包,粘包问题,每个用户的消息处理的是不是有序的,如果有序会不会阻塞消息,如果无序会不会造成处理混乱,比如后到的消息先处理了,这些问题都要处理好,目前一般是保证同一个用户的消息要有序处理!

    2,数据存储

    网络通信调试好之后,不要急着做逻辑开发,还需要把数据如何存储理清楚!因为服务器端操作的全是数据,如果处理的不好,容易出bug,丢数据,这对游戏玩家来说是致命的,不可接受的!数据存储要考虑,

    一,数据如何存到数据库,是同步存储,还是异步存储!同步存储即将数操作完之后立刻写入数据库,异步操作即数据操作完之后先存储到内存缓存,然后由另外的线程或进程再同步到数据库!游戏中一般都是采用的异步存储方式,因为游戏并发量大,必须低延时,快速响应客户端!如果直接操作数据库太慢,会造成消息阻塞!内存缓存可先择的框架有redis,memcache,具体怎么同步到数据库,需要自己去设计了!

    二,数据接口如何设计,能不能用工作生成这些数据操作的代码,能不能不用写SQL语句,需是封装在底层,或由工具生成。编程是门艺术,在这就体现出来了,当然是仁者见仁,智者见智了!

    三,大并发情况下数据的一致性,像这类可能多线程操作的数据,一般是放在内存中,由锁来控制并发!所以对锁的使用要熟悉,不要出现死锁,或锁粒度过大,造成线程的长时间等待的情况!四,当数据量太大,一个数据库存储不了,数据该怎么分库分表!一种是水平划分,一种是垂直划分!具体的划分方式其它资料已有详细介绍,请自行查找阅读!目前有一个开源的分库框架mycat,是用JAVA写的,大家可以研究一下!

    四,目前常用的数据库有MySQL和MongoDB,MongoDB的优点是在开发过程中添加或删除字段不用操作数据库表,它是文档性数据库。两者各有利弊,可以都熟悉一下。

    3,逻辑开发

    逻辑开发就是实现游戏策划想象的各种游戏功能,比如,登录,物品使用,战斗结算等!逻辑开发代码量巨大,相互之间有很紧密的耦合性,所以每个功能模块一定要划分好!最好是接触下单元测试,写之前考虑一下是否方便单元测试,这样设计的代码会更加清晰,每个方法责任明确,不容易出bug!正是因为逻辑代码复杂,为了更好的管理代码,前辈们给我们总结了一些经验,就是著名的设计模式,所以学习一下设计模式对代码的管理有很大的好处!

    逻辑开发一般遇到的问题有:

    3.1,数据同步

    一说到数据同步或资源共享的时候,一般都会考虑到锁的使用。因为一份资源同时只能被一个线程访问才是安全的。Java的JDK中提供了一些锁,比如:synchronized,以及java.util.concurrent.lock包中的Lock对象,java.util.concurrent包中还提供了其它的一些原子操作的类,我们知道i++操作不是线程安全的,但是可以使用AtomicInteger中的getAndIncrement();方法代替,还有线程安全的ConcurrentHashMap哈稀Map。以及阻塞队列LinkedBlockingQueue等。都是逻辑开发中常用的处理数据同步的类。

    3.2,设计模式的使用

    使用设计模式,可以让代码更加清晰,可扩展性更强,维护性更佳,比如,任务系统,任务会有很多种类型,要获得任务数据时,在一开始写这个系统的时候,我是这样写的if(type == 1)做什么,else if(type == 2)做什么,else if(type == 3)......else if(type == 35) else等。如果需要添加新的类型,又要添加else,这些if else都在同一个方法中。最后都不敢动一块,就怕出bug。其实当一个方法中出现三个以上的if else将来还可能增加时,就应当考虑设计是不是有问题了,后来改成责任链模式或状态模式,就解决了这个问题。还有一个例子是,当一个值变化,要影响多个任务完成状态时,可以使用观察者模式或监听模式或订阅模式去实现,这样功能之间完全解耦,出问题的机率会很小很小。

    3.3,数据缓存框架的API使用

    目前主流使用的数据缓存框架有redis和memcache,虽然在逻辑开发前,主程会对这些进行一些封装,但是作为使用者还是需要对这些框架的客户端的使用要有所了解的。这些可以去阅读相关的文档。不是太难。

    4,程序部署与运行

    目前,大多数Java项目都采用maven管理 ,可以使用maven打包开发好的程序,程序一般运行在远程服务器上,比如云服务器。一般运行Java程序的远程服务器都是Linux系统,需要使用Linux命令操作,或写一些shell脚本去自动化部署管理一些程序。

    5,艰苦奋斗的精神

    首先,一定要让自己对这一行有兴趣,明确自己在这一行的技术选择,人生选择。很多人都知道,程序员加班是常有的事,坚持的住就做,坚持不了就再换一家公司做。

    综上所述,想做Java游戏服务器方面的开发要掌握的技术有以下一些:

    1,网络通信框架,Mina或Netty必须熟悉一种。而且自己必须要亲自搭建过,并明白其它原理。

    2,通信协议制定和处理断包粘包,这一般属于网络通信框架要解决的问题。

    3,数据缓存框架,redis或memcache选择一个,能熟练使用其客户端的命令。

    4,Java基础,Java NIO通信原理,Java集合的使用,Java多线程开发,Java锁的使用,在Java界,以后Spring MVC,Spring Boot,Spring Cloud是必不可少的。

    5,了解一些设计模式。最好能把23种设计模式都看一遍,并结合自己的开发经验,看哪些可以用到设计模式,但也不能死套设计模式,要灵活运用。

    6,熟悉使用Mysql数据库

    7,了解数据库连接池的一些框架,比如Mybatis,hibernate

    8,对Http协议熟悉,熟悉一种web容器,比如tomcat,了解其配置。

    9,对常用的一些Linux命令要熟悉使用。

    10,热爱学习,不断的充实自己,上面所说的只是入门技能而已,真正做起来要复杂的多,一定要让自己喜欢游戏这个行业,这样才能有动力做下去,做自己喜欢的工作还是比为了工作要好的!


     

     

                                                                        

     

    展开全文
  • C++服务器开发完整学习路线

    千次阅读 多人点赞 2020-05-12 15:31:10
    C++服务器开发完整学习路线(含免费学习资料下载地址) 摘自:https://mp.weixin.qq.com/s/vkvQM8d78HBgJbUvY1KcLw 我看了下这里面高级阶段的nginx 容器我都接触过 原创 Buger 高并发学习社区 2019-06-04 视频...

    C++服务器开发完整学习路线(含免费学习资料下载地址)

    摘自:https://mp.weixin.qq.com/s/vkvQM8d78HBgJbUvY1KcLw

    我看了下这里面高级阶段的nginx  容器我都接触过

    原创 Buger 高并发学习社区 2019-06-04

    视频资料: 微信搜索公众号“高并发学习社区
    关注并且发送消息“视频” 。

     

    C++服务器开发完整学习路线(含免费学习资料下载地址)

    相信大部分同学刚毕业或者想转行做c++服务端开发的时候都很迷茫不知道从哪里开始学习,于是准备参加各种培训班或者网络培训,无奈动不动成千上万元的高昂的价格另人望而却步,对于在校学生或者刚出来就业的新人无疑是沉重都打击,最后决定自学,但是却不知道从哪里下手。我写这篇文章的目的就是为了帮助更多想入行或者想转行做c++服务器的新人避免走更多的弯路,最终能够顺利的掌握相关知识找到心仪的工作。

    一. 基础阶段  

    1. c/c++编程语言

    2. linux基础

    3. 数据结构与算法

    4. 设计模式

    5. 脚本语言(可选)

    二. 入门阶段  

    1. linux系统编程

    2. linux网络编程

    三. 进阶阶段  

    1. 数据库mysql

    2. 分布式缓存redis

    3. 网络库

    四. 项目实践阶段  

    1. 编写简单FTP服务器

    五. 高级阶段(可选)  

    1. nginx

    2. zookeeper

    3. 消息队列

    4. skynet

    5. boost  

    6. 负载均衡    

    7. 容器  

    8. rpc  

    9. 微服务  
      ……

    一. 基础阶段

    1. c/c++编程语言

    • c语言必备的入门书籍就是这本《C程序设计语言》  

    链接:http://vdisk.weibo.com/lc/3UlAHKgT3fnPf8rU7MV  
    密码:HCU3

    • 另外推荐一本比较经典的c语言书籍,可以选择性看一下《C陷阱与缺陷》  


      链接:http://vdisk.weibo.com/s/z1wkONlsC-2S3  

       

    • 既然是C++的学习路线,那么《C++ Primer》这本书肯定是必学不可的  


      链接:https://pan.baidu.com/share/init?surl=eQAdygU  
      密码:6mhv

       

    • 学了c++基础后,为了写出更高效的c++代码,那么就须要看这本书《Effective C++》  


      链接:https://pan.baidu.com/s/1X_hRLnyDnIUHrqY2b0xikQ  
      密码:9nim

       

    • 个人认为STL的原理非常重要,我推荐《STL源代码剖析》  


      链接:https://pan.baidu.com/s/1ndlM3QwPPR_qrZp3VV5SAA  
      密码:3ban

       

    • 另外推荐一本比较经典的c++书籍,可以选择性看一下《深度探索C++对象模型》  


      链接:https://pan.baidu.com/s/1eewVI  

       

    2. linux基础

    • linux系统安装和命令、工具使用  
      c++服务器程序基本都是运行在linux系统下面,所以对于linux的系统安装、命令工具等的使用要学会。  
      推荐《鸟哥的Linux私房菜-基础学习篇》  


      链接:https://pan.baidu.com/s/1pk1rw0NxXS2-1q-sfQRlPw    
      密码:dhwr

       

    • makefile编程    
      在软件开发中,make通常被视为一种软件构建工具。该工具主要经由读取一种名为“makefile”或“Makefile”的文件来实现软件的自动化建构。它会通过一种被称之为“target”概念来检查相关文件之间的依赖关系,这种依赖关系的检查系统非常简单,主要通过对比文件的修改时间来实现。在大多数情况下,我们主要用它来编译源代码,生成结果代码,然后把结果代码连接起来生成可执行文件或者库文件。  
      推荐《跟我一起学makefile》    
      链接:https://pan.baidu.com/s/18KSmdTHQhiw-Tng1RJxf1A  密码:526k

    3. 数据结构与算法

    • 入门推荐《大话数据结构》这本书,它的最大的特点是把理论讲得很有趣,不枯燥。而且每个数据结构和算法,作者都结合了生活中的例子,能让你有非常直观的感受。虽然这本书有 400 页,但是花两天时间读完应该是没问题的。所以,如果你之前完全不懂数据结构和算法,可以先从这本书看起。  

    链接:https://pan.baidu.com/s/1IB3xr4A4tcqPvAweaBN_hQ  
    密码:e729

    • 你也可以学习《数据结构和算法分析》。国内外很多大学都拿它当作教材。因为这本书非常系统、全面、严谨,而且又不是特别难,适合对数据结构和算法有些基本了解,并且掌握了至少一门编程语言的同学。而且,这个作者也很用心,他用了三种语言,写了三个版本,分别是:《数据结构与算法分析 : C 语言描述》、《数据结构与算法分析 : C++ 描述》、《数据结构与算法分析 : Java 语言描述》。  

     

    链接: https://pan.baidu.com/s/1K-SfpGsPSN-0JSq2zBfnzg  
    密码:mmp5

    4. 设计模式

    设计模式是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。  
    使用设计模式的目的:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。 设计模式使代码编写真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。  

     

    链接:https://pan.baidu.com/s/1_1ZzMnOCcs5NIAd3DqXpjw  
    密码:1vz9

    5. 脚本语言(可选)

    做c++开发很多情况下会和其他脚本语言做混合编程,特别是游戏公司以c++配合lua脚本编程作为主流,也有一些用python, 所以建议大家学一下这两门脚本语言

    • lua书籍推荐,包括入门书籍《lua程序设计》和深入原理书籍《lua设计与实现》  


      链接:https://pan.baidu.com/s/1iq2cPANIAQatVS0w2uGeGg  
      密码:35bt


    链接:https://pan.baidu.com/s/1OAIxhbtJcCDN7IioO3bGig  
    密码:xjg9

     

    • python书籍推荐 《python核心编程》  


      链接:https://pan.baidu.com/s/1qUYloocD4ygQlLnVlvP3nA  
      密码:rlhj

    二. 入门阶段

    1. linux系统编程

    linux下的编程你首先要学会文件和目录、标准I/O库、系统数据文件和信息、进程环境、进程控制、进程关系、信号、线程、线程控制、守护进程、各种I/O、进程间通信、网络IPC等方面的内容。  
    推荐《unix环境高级编程》  


    链接:https://pan.baidu.com/s/1zL_fL8GQYApD82RneXupGQ  
    密码:a6pc

     

    2. linux网络编程

    网络编程可以编写网络通讯程序,比如聊天程序、数据传输程序、文件传输程序等到;可以让你对网络通讯有更深的理解,当你遇到网络通讯方面的问题时,会有很深入的分析;为学习涌现很多分布式应用系统打下坚实的基础。  
    推荐《unix网络编程》(共两卷)  

     

    链接:https://pan.baidu.com/s/1QTrBUNBBHjDQMtq0G6Z6xA  
    密码:vznn

    三. 进阶阶段

    1. 数据库mysql

    • 入门推荐《MySQL必知必会》这是最好的数据库入门书,在Amazon上长期排在数据库销售榜首,建议想快速了解数据库原理和MySQL的新手阅读。快餐性质,简洁明快,小开本,而且很薄,比较好读。  


      链接:https://pan.baidu.com/s/1AiidwnxfzjzFzzqnnRhYrw  
      密码:y7mc

       

    • 怎么说,每个行业都有几本被翻来翻去的“街书”,而《mysql技术内幕》就是MySQL的“街书”。从源代码的角度深度解析了InnoDB的体系结构、实现原理、工作机制,并给出了大量最佳实践,能帮助你系统而深入地掌握InnoDB


    链接:https://pan.baidu.com/s/1k0j_hmkytJNpp_Htxsj9_w  
    密码:h01a

     

    • 《高性能mysql》作者推荐的工具、实战案例及经验过的诊断技术,可大大提高性能急救技能,以及加深对MySQL本质的理解。而且本书将数据库结构的客观方面纳入思考,此外还增补了MySQL高可用性及云特性  


    链接:https://pan.baidu.com/s/1vpZp90NOzlXgAR1LQOms0A  
    密码:jlyn

     

    2. 分布式缓存redis

    • 《Redis 设计与实现》一书全面而完整地讲解了 Redis 的内部运行机制, 对 Redis 的大多数单机功能以及所有多机功能的实现原理进行了介绍, 展示了这些功能的核心数据结构以及关键的算法思想。 通过阅读本书, 读者可以快速、有效地了解 Redis 的内部构造以及运作机制, 从而学会如何更高效地使用 Redis。  


      链接:https://pan.baidu.com/s/11JjvCzyRCx_xBl2hSAXrEQ  
      密码:19k0

       

    • 《redis实践》本书深入浅出地介绍了Redis的5种数据类型,并通过多个实用示例展示了Redis的用法。除此之外,书中还讲述了Redis的优化方法以及扩展方法。  


      链接:https://pan.baidu.com/s/1IfachFqYkRTQU0cjWJH-Vg  
      密码:qc28

       

    3. 网络库

    linux c/c++网络库比较多,有boost.asio、libevent、libev、libuv、muduo、ace等, 建议找一个代码比较少够精简的来反复学习,琢磨内部原理,有效提升网络编程能力。我自己反复研究了muduo网络库几遍收获不少,你们可以选libevent、libev、libuv、muduo中的一个学习即可,其中libev和muduo最为精简,容易学习。

    • libevent学习资源  
      Libevent源码分析专栏:https://blog.csdn.net/luotuo44/column/info/libevent-src/2    
      libevent-book:https://pan.baidu.com/s/1h-x1OrfiB-Jvb-YUvEghfg  密码:18wg

    • muduo学习资源    


      Linux多线程服务端编程:使用muduo C++网络库https://pan.baidu.com/s/17BLWk6ntscqY2iZHnUGe5w 密码: hknk    
      muduo使用手册:https://pan.baidu.com/s/1eM9Qhyr9hvOLgyklkYCqBw 密码:l4bn

       

    四. 项目实践阶段

    1. 编写简单FTP服务器

    2. 未完待续 … (后面更新请关注公众号“高并发之路”)

    五. 高级阶段(可选)

    1. nginx

    • Nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器;Nginx可以作为一个HTTP服务器进行网站的发布处理,另外Nginx可以作为反向代理进行负载均衡的实现。  
      推荐书籍《深入理解nginx模块开发与架构解析》  


      链接:https://pan.baidu.com/s/1FReO-fEJbnknNoQJHhNPkA  
      密码:6m7k

    2. zookeeper

    • ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。  


      链接:https://pan.baidu.com/s/1S5o9V5vCkoTlcoCJrfIuHg  
      密码:xlxo

    3. 消息队列

    • 当前使用较多的消息队列有RabbitMQ、RocketMQ、ActiveMQ、Kafka、ZeroMQ、MetaMq等, 我推荐两本kafka的书籍, 入门书籍《kafka权威指南》和深入的书籍 《Kafka技术内幕:图文详解Kafka源码设计与实现》  


      链接:https://pan.baidu.com/s/1ql44eTtUAtbBvMQGepMSBQ  
      密码:t210


    链接:https://pan.baidu.com/s/1fIEbmiQ-rogrLufbJ2hFGA  
    密码:hash

     

    4. skynet

    • Skynet是一个基于C跟lua的开源服务端并发框架, 现在很多游戏公司都在用它,特别是中小型的公司,棋牌公司,越来越多公司采用, 想往游戏方面发展建议认真学一下原理。  
      skynet wiki:https://github.com/cloudwu/skynet/wiki    
      skynet作者博客:https://blog.codingnow.com/eo/skynet/    
      skynet框架应用文章:https://blog.csdn.net/qq769651718/article/category/7480207

    5. 未完待续 … (后面更新请关注公众号“高并发学习社区”)

     

    微信扫一扫
    关注该公众号

    展开全文
  • C++web服务器开发

    千次阅读 2019-08-14 08:55:56
    C++web服务器开发 1. 首先介绍一下这个项目;这个项目是通过C++11编写的web服务器,模型为Reactor+非阻塞I/O(epoll作为I/O多路复用实现方式)+线程池,支持get、head请求,支持HTTP长连接,并实现了优雅关闭连接。 ...

    C++web服务器开发

    1. 首先介绍一下这个项目;这个项目是通过C++11编写的web服务器,模型为Reactor+非阻塞I/O(epoll作为I/O多路复用实现方式)+线程池,支持get、head请求,支持HTTP长连接,并实现了优雅关闭连接。

    I/O多路复用是什么技术呢? I/O多路复用(multiplexing)的本质是通过一种机制(系统内核缓冲I/O数据),让单个进程可以监视多个文件描述符,一旦某个描述符就绪(一般是读就绪或写就绪),能够通知程序进行相应的读写操作。(包括select、poll、epoll)

    文件描述符 文件描述符(File descriptor)是计算机科学中的一个术语,是一个用于表述指向文件的引用的抽象化概念。
    文件描述符在形式上是一个非负整数。实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。在程序设计中,一些涉及底层的程序编写往往会围绕着文件描述符展开。但是文件描述符这一概念往往只适用于UNIX、Linux这样的操作系统。

    select、poll和epoll的区别 select函数只能轮询linux操作系统提供的fd_set这个类型的变量,poll函数轮询的是pollfd这个类型的数组,这个数组可以自己定义长度,而不是上面select函数只能轮询定长为FD_SETSIZE的fd_set变量。epoll不再是轮询,而是给每个文件描述符上发生的io事件设置一个回调函数。

    2.定时器是怎么实现的?还有什么实现方式?
    定时器用来处理超时的请求和长时间不活跃的连接,使用stl里的priority_queue,基于小根堆的定时器关闭超时请求,并采用惰性删除的方式,时间的到来不会唤醒线程,而是每次循环的最后进行检查,如果超时了再删,因为这里对超时的要求并不会很高,如果此时线程忙,那么检查时间队列的间隔也会短,如果不忙,也给了超时请求更长的等待时间。还可以使用STL中的set。

    3.实现一个无锁队列? 用原子操作

    4.eventfd是什么?有什么好处?
    eventfd是系统提供的一个轻量级的进程间通信的系统调用,eventfd实现了线程的异步唤醒(eventfd()会返回一个文件描述符,如果该进程被fork的时候,这个文件描述符也会复制过去,这时候就会有多个的文件描述符指向同一个eventfd对象)

    5.双缓冲区异步日志是什么?为什么要这样做?对这个日志系统有没有进行压力测试?
    基本思路是准备两块buffer:A和B, 前端负责往buffer A填数据(日志消息), 后端负责将buffer B的数据写入文件;当buffer A写满之后, 交换A和B, 让后端将buffer A的数据写入文件, 而前端则往buffer B填入新的日志消息, 如此往复。
    好处:前端不是将一条条日志消息分别送给后端,而是将多条日志消息拼接成一个大的buffer传送给后端,相当于批处理,减少了线程唤醒的开销。

    6.什么是优雅关闭连接?
    就是read()到0,要透明的传递这个行为而不是直接暴力close()

    7.epoll的边沿触发(et)和水平触发(lt)有什么区别? lt模式下,默认不可读,只有epoll通知你可读才是可读,否则不可读。
    et模式下,默认可读。你可以随便读,直到发生EAGAIN。可读时读和不读,怎么读都由你自己决定,中间epoll不管。
    EAGAIN后不可读了,等到再次可读,epoll会再通知一次。
    ET模式要比LE复杂许多,它对用户提出了更高的要求,即每次读,必须读到不能再读(出现EAGAIN),每次写,写到不能再写(出现EAGAIN)。而LT则简单的多,可以选择也这样做,也可以为编程方便,比如每次只read一次(muduo就是这样做的,这样可以减少系统调用次数)。

    8.epoll为什么高效,相比select和poll

    1. 减少了用户态和内核态之间的文件描述符拷贝
    2. 减少了对就绪文件描述符的遍历

    9.假如服务器要升级,又不想让用户感觉到服务器升级了,该怎么做?
    不间断的提供服务,参考nginx的平滑升级

    10.Reactor模式是什么?
    反应器设计模式(Reactor pattern)是一种为处理并发服务请求,并将请求提交到一个或
    者多个服务处理程序的事件设计模式。当客户端请求抵达后,服务处理程序使用多路分配策略,由一个非阻塞的线程来接收所有的请求,然后派发这些请求至相关的工作线程进行处理。

    展开全文
  • 深度解析Java游戏服务器开发

    千次阅读 2018-09-03 20:18:00
     1.4游戏服务器开发要点  网络知识(OSI参考模型、套接字、长连接、短连接)、并发编程、设计模式(单例模式、工厂模式、观察者模式)、数据库(MySQL、Mongo,内存数据库Redis、Memcache、Ehcache)、gm运营工具...
  • 写给那些傻傻想做服务器开发的朋友

    万次阅读 多人点赞 2018-12-04 17:41:41
    注意:我把这段经历并没有放在上面的关于服务器开发是否频繁地加班的栏目下,这里我想说明的并不是服务器开发要经常加班,我想说的是,如果你平常只会用轮子,而不注重基础内功的修养,这种场景你是很难应对的,首先...
  • java服务器开发(二)

    千次阅读 2018-07-13 10:03:49
    java服务器开发基础篇-从零开始 这里记录了最初期的基本开发步骤 1、
  • 小编从事c方面10多年的工作经验、今天跟大家分享一下我总结出来的一系列 C/C Linux后台服务器开发的学习路线。从Linux开发工程师-Linux后台开发工程师-Linux高级互联网架构师。 上篇写编跟大家分享从Linux开发工程师...
  • 游戏服务器开发需要学习的技术

    千次阅读 2018-03-09 18:51:04
    一,游戏服务器编程语言的选择 所谓的游戏服务器编程语言其实有很多,...所以接下来就以自己的经验,谈谈以Java为核心的游戏服务器开发技术体系。 Java目前作为游戏服务器开发语言已经很是普遍。但是大多数是作...
  • 高性能服务器开发 2018 年原创汇总

    千次阅读 多人点赞 2019-01-14 20:16:50
    2018 年就这样过去了,总结一下 2018 年『高性能服务器开发』公众号发表的一些原创文章,欢迎读者鉴阅。   面试求职 写给那些傻傻想做服务器开发的朋友 『腾讯后台开发』实习生技能要求 去BAT,你...
  • 服务器开发必读书籍

    千次阅读 2017-10-15 16:54:21
    《鸟哥的LINUX私房菜服务器架设篇》 《Linux程序设计》马修 《UNIX 环境高级编程》 《Linux内核设计与实现》 《Linux内核完全注释(修正版v3.0)》 《Unix 编程艺术》 七、LINUX 工具系列 《VIM中文手册》 ...
  • 黑马程序员C/C++学习路线图大纲中第六阶段的学习是游戏服务器开发的学习:主要介绍了C/C++学习路线图的游戏服务器开发的学习目标,C/C++学习路线图的游戏服务器开发的市场价值,C/C++学习路线图的游戏服务器开发的...
  • Go是比C++更好用的高级语言使用Go作为服务器开发的主语言前,首先需要对Go语言做下定性。在接触Go前,可能给人的印象(至少是我),Go是一门脚本语言。看了 官方文档 ,才知道Go是一门高级语言。与C++相比,它有以下...
  • 游戏服务器开发(基本需求)

    千次阅读 2019-04-04 17:12:39
    1,团队沟通 ...客户端主程(领导一些人,客户端程序员,客户端程序员...),服务器主程(领导一些人,包括服务器程序员,服务器程序员),外加运维。而游戏的大部分逻辑实现与逻辑数据验证都会...
  • Java游戏服务器开发之二--导航帖

    万次阅读 2018-06-29 16:12:08
    Java游戏服务器开发之三--日志  Java游戏服务器开发之四--通讯框架netty    Java游戏服务器开发之五--使用工厂模式生成netty     Java游戏服务器开发之六--整合spring   Java游戏服务器开发之七--使用...
  • ubuntu16.04服务器开发环境搭建

    千次阅读 2017-10-14 08:58:54
    这个文章供配置服务器开发环境的时候自己用。整体搭建流程
  • java服务器开发(一)

    万次阅读 2018-06-28 16:31:33
    从零开始java服务器开发之环境配置 1、安装jdk并配置环境变量 - - -java运行环境 见:https://blog.csdn.net/u012934325/article/details/73441617 2、myeclipse安装配置 - - -开发环境 见:...
  • Java做服务器开发语言

    千次阅读 2015-06-04 13:54:51
    随着游戏市场的兴起,特别是网页游戏、手机游戏的崛起,对游戏开发技术的需求越来越多。网络游戏开发是一个庞大的体系,总体...我们公司选择使用Java做服务器开发语言,主要原因是:1.Java是跨平台的,方便部署;2.Java
  • 不知什么原因,出售的《深度解析Java游戏服务器开发》一书中,没有给出源码,这里补上,源码已经上传至github: https://github.com/hjcenry/JavaServerBookCode 欢迎给出指导意见
  • 本章主要讲解如何购买和配置阿里云ECS服务器以及搭建网络站点。
  • 学习JAVA游戏服务器开发需要了解的情况

    万次阅读 多人点赞 2018-06-11 16:09:38
    一,游戏服务器开发的工作介绍近来遇到有很多人想从其它开发领域转到游戏服务器开发行业上来,他们或许觉得游戏服务器开发工资高,或许觉得做游戏服务器需要掌握的技术更高级,可以锻炼自己,或许觉得想换个环境等等...
  • c++应该怎样学习?c++服务器开发必备知识

    千次阅读 多人点赞 2019-05-17 10:40:09
    本文对c语言、c++语言开发基础知识点做了总结,同时作为服务器开发者必备的技能如:多线程、数据库、I/O多路复用、设计模式、tcp协议等原理进行了讲解。
  • 客户端(Client)或称为用户端,是指与服务器相对应,为客户提供本地服务的程序。除了一些只在本地运行的应用程序之外,一般安装在普通的客户机上,需要与服务端互相配合运行 。因特网发展以后,较常用的用户端包括...
  • c++服务器开发 之一 概要介绍

    千次阅读 2016-03-09 21:56:08
    c++服务器开发 之一 概要目录介绍 背景  指的是普通的c++服务器开发,不涉及特定的需求,仅涉及需要实现大众功能的系统。  假设读者对c++的基础概念都有所了解 基础技术、相关的库和模型介绍  回调、同步、...
  • 三、嵌入式开发、移动开发、服务器开发。3.1、嵌入式开发那些事。3.2、安卓开发那些事。3.3、服务器开发那些事。四、2018开发技术点总结。 一、个人总结? 不经意间,2018年也就貌似流逝在指尖过去了,回忆...
  • 2018年3月3日近来遇到有很多人想从其它开发领域转到游戏服务器开发行业上来,他们或许觉得游戏服务器开发工资高,或许觉得做游戏服务器需要掌握的技术更高级,可以锻炼自己,或许觉得想换个环境等等。不管出于什么...
  • 在上一篇文章中, 我们介绍了游戏服务器的基本架构、相关框架和Node.js开发游戏服务器的优势。本文我们将通过聊天服务器的设计与开发,来更深入地理解pomelo开发应用的基本流程、开发思路与相关的概念。本文并不是...
  • 在上一篇文章中, 我们介绍了游戏服务器的基本架构、相关框架和Node.js开发游戏服务器的优势。本文我们将通过聊天服务器的设计与开发,来更深入地理解pomelo开发应用的基本流程、开发思路与相关的概念。本文并不是...
  • BS开发(浏览器和服务器开发)

    千次阅读 2020-06-18 20:32:33
    浏览器 通过服务器控制联网的设备 HTML:超文本标记语言 静态的 显示网页 CSS:层叠样式表 渲染网页 XML:指可扩展标记语言 传输网页 Javascript:脚本语言 和 网页交互 (局部刷新网页) AJAX:基于Javascript语言的...
  • Pycharm连接Linux服务器进行远程开发

    万次阅读 2021-06-09 16:54:11
    Pycharm连接Linux服务器进行远程开发 1、电脑创建空文件夹并用Pycharm打开 2、Pycharm配置Deployment 3、配置SFTP 验证可成功连接 4、配置项Linux项目路径 5、配置本地项目路径 以上设置好每个部分都点击ok保存 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,067,897
精华内容 827,158
关键字:

服务器开发

友情链接: CAB22.rar