热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Netty构建游戏服务器(一)基本概念与原理

一,Netty是什么1,Netty是由 JBOSS 提供的一个 java开源 框架。2,Netty是JAR包,一般使用ALL-IN-ONE的JAR包就可以开发了。3,Netty不需

一,Netty是什么

1,Netty是由 JBOSS 提供的一个 java开源 框架。

2,Netty是JAR包,一般使用ALL-IN-ONE的JAR包就可以开发了。

3,Netty不需要运行在Tomcat这类服务器中,他是单独构建一个服务器。

4,Netty可以构建HTTP服务器,socket服务器,websocket服务器等。

5,Netty其实是对JDK1.4以后提供的NIO的封装,NIO就是new i/o,JDK1.7推出了NIO2。

二,Netty服务架构图

以下官方图展示了Netty基本提供的服务:

Netty构建游戏服务器(一)--基本概念与原理

主要提供的就是HTTP服务器,socket服务器,websocket服务器。

三,Netty原理架构图

从下面的原创图,可以基本看出Netty构建服务器的原理

Netty构建游戏服务器(一)--基本概念与原理

1,组件名词解释

(1),Bootstrap / ServerBootstrap(建立连接):

Netty引导组件,简化NIO的开发步骤,是一个Netty程序的开始,作用是配置和串联各个组件。

(2)EventLoopGroup(事件循环组):

是EventLoop组合,可以包含多个EventLoop。创建一个EventLoopGroup的时候,内部包含的方法就会创建一个子对象EventLoop。

(3)EventLoop(事件循环):

循环服务Channel,可以包含多个Channel。

(4)Channel(通道):

代表一个Scoket连接,或者其他IO操作组件。

(5)ChannelInitializer(初始化连接):

主要提供了一个传输通道ChannelPipeline。

(6)ChannelPipeline(传输通道):

主要是管理各种ChannelHandler业务控制器,提供一个链式管理模式。

(7)ChannelHandler(业务控制器):

主要业务写入的地方,由开发人员写入,Netty也提供了很多写好的控制器和适配器,可以直接引用。

(8)ChannelInboundHandler(通道传入控制器):

继承至ChannelHandler,在传输通道中对传入事件进行控制。

(9)ChannelOutboundHandler(通道传出控制器):

继承至ChannelHandler,在传输通道中对传出事件进行控制。

(10)Decoder(解码):

网络传输都是byte传输,所以Netty首先接收到的是byte,需要进行解码,编程JAVA对象。

Netty提供了很多解码器,包括服务架构图(最上)显示的Google Protobuf编码,这是Google提供的跨平台的小体积编码方式,在Netty中可以直接解码。

(11)Encoder(编码):

和解码类似,在传出服务器的时候,需要编码成byte传输给客户端。

(12)Future / ChannelFuture(消息返回,图上没有):

Netty提供的返回结果,类似回调函数,告知你执行结果是什么。

2,构建服务器基本方法

从原理架构图可以看出,构建一个Netty服务器基本需要3个步骤:

1),ServerBootstrap(建立连接):构建一个Scoket或者其他连接,通过事件循环建立通道。

2),ChannelInitializer(初始化连接):构建传输通道,用于管理控制器。

3),ChannelHandler(业务控制器):构建业务控制器,最基本的是解码,编码,信息传入/传出。

同样,构建一个客户端,同样也是这些步骤,不过建立连接是使用Bootstrap,并且使用一个事件循环,而服务器一般使用两个事件循环。

具体代码可以看一下节内容:构建一个最简单的socket服务器与客户端。

四,Netty构建游戏服务器有什么优势

1,游戏服务器是一个复杂的组成,基本要求是低延迟和高并发。游戏服务器经常需要各种通信,例如地图服务器、网管服务器、聊天服务器之间的通信。Netty的异步NIO框架可以保证高性能的通信能力。

2,灵活的编码解码定制能力,满足不同游戏场景下的多协议和私有协议编解码。

3,可配置的线程池,TCP参数,提供差异化定制能力。

4,黑白名单过滤(IP过滤),SSL安全,可以用于登录认证环节。

5,Netty心跳检测(链路有效性检测),用于检测客户端是否处于活跃状态。心跳检测是指,服务器定期向客户端发送指定内容,通过反馈来判断链路是否可用,客户端是否活着,是否可以正常接收和发送消息。

6,流量整形,一种主动调整流量输出速率的措施。作用是

1),防止由于上下游网元性能不均衡导致下游网元被压垮,业务流程中断;

2),防止由于通信模块接收消息过快,后端业务线程处理不及时导致的“撑死”问题。

流行整形原理是将废弃报文先缓存,放入队列中,当具有足够令牌的时候在发送缓存的报文。这种做法可以缓解压力,但是有一定的延迟。

7,日志统计能力,提供游戏服务可服务性。

8,基于内存池的对象重用技术,降低GC频度,使得玩家不卡。

 


推荐阅读
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 如何实现JDK版本的切换功能,解决开发环境冲突问题
    本文介绍了在开发过程中遇到JDK版本冲突的情况,以及如何通过修改环境变量实现JDK版本的切换功能,解决开发环境冲突的问题。通过合理的切换环境,可以更好地进行项目开发。同时,提醒读者注意不仅限于1.7和1.8版本的转换,还要适应不同项目和个人开发习惯的需求。 ... [详细]
  • 开发笔记:spring boot项目打成war包部署到服务器的步骤与注意事项
    本文介绍了将spring boot项目打成war包并部署到服务器的步骤与注意事项。通过本文的学习,读者可以了解到如何将spring boot项目打包成war包,并成功地部署到服务器上。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • 从零基础到精通的前台学习路线
    随着互联网的发展,前台开发工程师成为市场上非常抢手的人才。本文介绍了从零基础到精通前台开发的学习路线,包括学习HTML、CSS、JavaScript等基础知识和常用工具的使用。通过循序渐进的学习,可以掌握前台开发的基本技能,并有能力找到一份月薪8000以上的工作。 ... [详细]
  • Spring框架《一》简介
    Spring框架《一》1.Spring概述1.1简介1.2Spring模板二、IOC容器和Bean1.IOC和DI简介2.三种通过类型获取bean3.给bean的属性赋值3.1依赖 ... [详细]
  • OpenMap教程4 – 图层概述
    本文介绍了OpenMap教程4中关于地图图层的内容,包括将ShapeLayer添加到MapBean中的方法,OpenMap支持的图层类型以及使用BufferedLayer创建图像的MapBean。此外,还介绍了Layer背景标志的作用和OMGraphicHandlerLayer的基础层类。 ... [详细]
  • maven项目_idea导入本地maven项目
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了idea导入本地maven项目相关的知识,希望对你有一定的参考价值。首先把项目关闭Fil ... [详细]
  • Hadoop2.6.0 + 云centos +伪分布式只谈部署
    3.0.3玩不好,现将2.6.0tar.gz上传到usr,chmod-Rhadoop:hadophadoop-2.6.0,rm掉3.0.32.在etcp ... [详细]
  • 1.脚本功能1)自动替换jar包中的配置文件。2)自动备份老版本的Jar包3)自动判断是初次启动还是更新服务2.脚本准备进入ho ... [详细]
  • javascript  –  RTL布局中的bootstrap datepicker无法正常工作
    RTL布局中的bootstrapdatepicker工作不正常,我正在使用这个bootstrapdatepickerhttp:bootstrap-datepicker.readth ... [详细]
  • 初识java关于JDK、JRE、JVM 了解一下 ... [详细]
author-avatar
凯鹏2502896277
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有