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

Netty构建游戏服务器(一)--基本概念与原理的更多相关文章

  1. Netty构建游戏服务器(三)--netty spring简单整合

    一,基本方法 上节实现了netty的基本连接,这节加入spring来管理netty,由spring来开启netty服务. 在netty服务器中,我们建立了三个类:HelloServer(程序主入口) ...

  2. Netty构建游戏服务器(二)--Hello World

    一,准备工作 1,netty-all-4.1.5.Final.jar(官网下载) 2,eclipse 二,步骤概要 1,服务器开发 (1),创建Server类 该类是程序的主入口,有main方法,服务 ...

  3. Netty构建Http服务器

    Netty 是一个基于 JAVA NIO 类库的异步通信框架,它的架构特点是:异步非阻塞.基于事件驱动.高性能.高可靠性和高可定制性.换句话说,Netty是一个NIO框架,使用它可以简单快速地开发网络 ...

  4. 基于Netty打造RPC服务器设计经验谈

    自从在园子里,发表了两篇如何基于Netty构建RPC服务器的文章:谈谈如何使用Netty开发实现高性能的RPC服务器.Netty实现高性能RPC服务器优化篇之消息序列化 之后,收到了很多同行.园友们热 ...

  5. Netty游戏服务器之一

    所谓磨刀不误砍柴工,所以在搭建netty游戏服务器之前,我们先要把要准备的东西做好. 首先进入netty的官网下载最新版本的netty的jar包,http://netty.io/downloads.h ...

  6. HTML5游戏开发进阶指南(亚马逊5星畅销书,教你用HTML5和JavaScript构建游戏!)

    HTML5游戏开发进阶指南(亚马逊星畅销书,教你用HTML5和JavaScript构建游戏!) [印]香卡(Shankar,A.R.)著 谢光磊译 ISBN 978-7-121-21226-0 201 ...

  7. 游戏服务器:到底使用UDP还是TCP

    http://blog.jobbole.com/64638/ 在编写网络游戏的时候,到底使用UDP还是TCP的问题迟早都要面对. 一般来说你会听到人们这样说:“除非你正在写一个动作类游戏,否则你就用T ...

  8. 游戏服务器的思考之三:谈谈MVC

    游戏服务器也是基于MVC架构的吗?是的,所有的应用系统都是基于MVC架构的,这是应用系统的天性.不管是客户端还是后台,都包含模型.流程.界面这3个基本要素:不同类型的应用,3要素的“重量”可能各有偏差 ...

  9. 游戏服务器和Web服务器的区别

    用Go语言写游戏服务器也有一个多月了,也能够明显的感受到两者的区别.这篇文章就是想具体的聊聊其中的区别.当然,在了解区别之间,我们先简单的了解一下Go语言本身. 1. Go语言的特点 Go语言跟其他的 ...

随机推荐

  1. Web性能优化系列:10个JavaScript性能提升的技巧

    由 伯乐在线 - Delostik 翻译,黄利民 校稿.未经许可,禁止转载!英文出处:jonraasch.com.欢迎加入翻译小组. Nicholas Zakas是一位 JS 大师,Yahoo! 首页 ...

  2. Django-C002-深入模型,到底有多深

    此文章完成度[100%]留着以后忘记的回顾.多写多练多思考,我会努力写出有意思的demo,如果知识点有错误.误导,欢迎大家在评论处写下你的感想或者纠错. ORM介绍:对象关系映射(英语:(Object ...

  3. AC自动机讲解+[HDU2222]:Keywords Search(AC自动机)

    首先,有这样一道题: 给你一个单词W和一个文章T,问W在T中出现了几次(原题见POJ3461). OK,so easy~ HASH or KMP 轻松解决. 那么还有一道例题: 给定n个长度不超过50 ...

  4. Bootstrap历练实例:响应式导航栏

    响应式的导航栏 为了给导航栏添加响应式特性,您要折叠的内容必须包裹在带有 classes .collapse..navbar-collapse 的 <div> 中.折叠起来的导航栏实际上是 ...

  5. python中enumerate()函数的用法

    描述: enumerate() 函数用于将一个可遍历的数据对象(如列表.元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中.其英文意为:枚举,列举. 函数说明: 语法 ...

  6. Django REST framework 中的视图

    1.Request REST framework传入视图的request对象不再是Django默认的Httprequest对象,而是DRF提供的扩展类的Request类的对象 常用属性 request ...

  7. (46)zabbix报警媒介:Jabber

    Jabber有第三方插件,能让Jabber用户和MSN.YahooMessager.ICQ等IM用户相互通讯.因为Google遵从Jabber协议,并且Google已经将Gtalk的服务器开放给了其它 ...

  8. 五:SQL语句中的数据类型

    一:MySQL数据类型 MySQL中定义数据字段的类型对你数据库的优化是非常重要的 MySQL支持多种数据类型,大致可以分为三类:数值 日期/时间和字符串 二.数值类型(12) 2.1.整数类型(6) ...

  9. 条款38:通过复合塑模has-a或“根据某物实现出”

    NOTE: 1.复合(composition)的意义和public继承完全不同. 2.在应用域(application domain),复合意味 has-a(有一个). 在实现域(implementa ...

  10. python基础知识14-正则表达式

    1.正则表达式 正则可以代替其他任何工具,但是其他工具不能完全代替正则. 1.匹配或提取字符串的工具,基于所有语言之上的工具. 正则表达式所面向的问题 判断一个字符串是否匹配给定的格式,如判断用户注册 ...