一,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基本提供的服务:

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

三,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频度,使得玩家不卡。

转载于:https://www.cnblogs.com/WangBoBlog/p/8718044.html

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

  1. linux 赚钱游戏服务器,在Linux上构建游戏服务器所需的一切

    与多个玩家玩游戏一直以来都比较有趣.它始于Atari 2600和街机机柜.当互联网时代到来时,游戏服务器使远程多人游戏成为现实. 使用当前一代的PC游戏,您可以连接到服务器或自己运行.Minecraf ...

  2. Java游戏服务器开发之概念扫盲

    入行缘由 在2017年我正式的从web转Java游戏服务器开发.那个时候机缘巧合的投了一家使用Java语言开发游戏服务器的企业,当时的老板还问我为什么从web转游戏开发.当时我的回答还是历历在目:我喜 ...

  3. K8S 快速入门(一)虚拟化、容器化构建云计算平台的基本概念及原理解析

    本章主题 1.认识kubernetes (k8s) 在企业中应用场景? ----- 为什么要学习K8s?? 2.云技术(云计算平台) - 虚拟化及虚拟化基本概念及原理 3.云技术(云计算平台) - 容 ...

  4. 大型多人在线游戏服务器架构设计 - RPC封装原理

    RPC框架分为客户端部分与服务端部分: RPC-client的部分又分为: (1)序列化反序列化的部分(上图中的1.4) (2)发送字节流与接收字节流的部分(上图中的2.3) 前一篇文章讨论了序列化与 ...

  5. ktor框架用到了netty吗_教你如何构建异步服务器和客户端的 Kotlin 框架 Ktor

    Ktor 是一个使用 Kotlin 以最小的成本快速创建 Web 应用程序的框架. Ktor 是一个用于在连接系统(connected systems)中构建异步服务器和客户端的 Kotlin 框架. ...

  6. Java游戏服务器开发之二--导航帖

    Java游戏服务器开发之三--日志         Java游戏服务器开发之四--通讯框架netty Java游戏服务器开发之五--使用工厂模式生成netty Java游戏服务器开发之六--整合spr ...

  7. 类Photon游戏服务器引擎Matchvs简介

    在介绍Matchvs前,先来了解下是什么游戏服务器引擎?虽然很多人可能都听过国外的Photon,但相对于引擎,大家对游戏服务器框架这个概念可能更为熟悉.框架其实就是针对后台通讯部分搭建一个可复用的设计 ...

  8. Java游戏服务器系列之Netty详解

    今天带大家来学习Java游戏服务器的相关知识,文中对Netty作了非常详细的介绍,对正在学习java的小伙伴们有很好的帮助,需要的朋友可以参考下 一.简介 Java的底层API逐渐复杂,而开发者面对的 ...

  9. ioGame 网络游戏服务器框架 (java)、java游戏服务器、netty 集群分步式的网络游戏服务器

    ioGame 国内首个基于蚂蚁金服 SOFABolt 的 java 网络游戏服务器框架:无锁异步化.事件驱动的架构设计 通过 ioGame 可以很容易的搭建出一个集群无中心节点.有状态多进程的分步式游 ...

最新文章

  1. python中的df是什么意思_在python中从df-h输出中选择特定列
  2. PHP超时处理全面总结
  3. 第五篇:Mysql的数据备份与恢复---------
  4. Java消息系统简单设计与实现
  5. 订阅广告一个微博大号的微信生存记
  6. TQ210 —— 点亮LED
  7. python表示当前目录_从Python脚本获取当前目录的父项
  8. R语言给图形填充颜色(polygon函数)
  9. 触漫机器人_触触+机器人=???
  10. 微课|中学生可以这样学Python(例11.4):tkinter版图片查看器
  11. wait会释放锁吗_漫画:如何证明sleep不释放锁,而wait释放锁?
  12. 通过DBlink获取不同数据库数据
  13. mysql数据库的凭据是什么_使用存储的凭据通过dplyr连接到MySQL数据库
  14. python前端工资_前端的工资分布情况-你又拖后退了吗?
  15. 推荐几个学习GIS的社区
  16. 中兴B860AV1.1_机顶盒_(4G和8G版)刷机固件升级和教程
  17. Centos7下载安装教程【图文详解】
  18. matlab计算方阵对应特征值的特征向量
  19. 基于51单片机的红外遥控电风扇
  20. 斗鱼爬取主播相册爬虫函数封装

热门文章

  1. P5714 【深基3.例7】肥胖问题--python3实现
  2. 前后端分离重复提交_阿里一面:如何保证API接口数据安全?
  3. 基于java的络教学平台的设计与实现 (含源文件)
  4. java程序优化快捷键_Java 代码中针对性能优化的总结方案
  5. Python笔记-UiSelector中class定位
  6. 系统架构师学习笔记-基于构件的开发
  7. linux arp代理配置,linux下tomcat的arp配置
  8. ccf推荐期刊和会议目录_重磅快讯:大数据入选CCF推荐中文科技期刊目录!
  9. 大学计算机学生成绩综合管理系统,大学综合测评成绩管理系统的研究 计算机专业毕业论文.doc...
  10. yum php 降级 5.3,CentOS 5.3 通过yum升级php的方法