阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

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

286次阅读
没有评论

共计 2488 个字符,预计需要花费 7 分钟才能阅读完成。

导读 今天带大家来学习 Java 游戏服务器的相关知识, 文中对 Netty 作了非常详细的介绍, 对正在学习 java 的小伙伴们有很好的帮助, 需要的朋友可以参考下
一、简介

Java 的底层 API 逐渐复杂,而开发者面对的开发场景需求也在逐渐增大。如果直接针对底层 API 进行编程,无疑是耗时耗力的。这时就催生了极多的编程框架,这些框架隐藏了 API 实现的复杂细节,以最简洁的方式给开发人员提供功能的实现接口。Netty 就是一款针对于网络链接的框架,他的出现让服务器开发人员更加的集中关注于更多逻辑的实现,而不为了实现更好更多更稳定的链接而头疼。Netty 的核心功能基于 NIO 实现。

二、Netty 的应用场景

几乎适用于所有的长短链接场景,由于 Java 应用的广泛性,几乎所有的互联网公司或多或少的都会使用到。博主从事游戏开发,可以说几乎所有短链接游戏服务器都是使用 Netty 开发,实效性要求比较高也有热修复需求的服务器一般不会使用 Java,目前采用更多的是 C +Lua 的组合方式。Java 不可以热修复是很多长链服务器不考虑 java 的一个重要原因。

三、异步和事件驱动性

NIO 文章中强调了,这种模型的主要特地拿就是异步和事件驱动性,异步是服务器不需要一直等待链接输入直到链接关闭。而是可以在某个特定的时候去相应链接的输入,而特定的时候就是另一个事件驱动性,链接发生变化时,会产生一个事件,而 NIO 模型检测到这个事件之后,会去相应这个事件的处理事件。

四、Netty 核心组件

1.Channel:

Channel 时 Java-NIO 的一个基本构造,它代表到一个实体的开放链接,如读操作和写操作,在 NIO 模型中也可以被理解成一个入站或者出站的数据载体,可以被关闭或者关闭。

2. 回调 ChannelHandler:

一个回调就是一个方法,Netty 提供了两个子类,ChannelInboundHandlerAdapter 以及 ChannelOutboundHandlerAdapter , 这两个子类分别可以应用于数据进站和出站时期,各种阶段的回调,比如入站时 Active 方法,表明链接刚刚被建立起,代码如下:

public class ConnectHandler extend ChannelInboundHandlerAdapter{
	@override
	public void ChannelActive(ChannelHandlerContext ctx){
		// 数据入站回调子类被建立时调用,也就是链接建立时调用
		System.out.println("远程客户端 :"+ ctx.channel().remoteAddress() + '建立链接');
	}
}

不了解 Netty 的读者看到这里可能会有点疑惑,这个类应该怎么用。这里简单的解释一下:这种类会在 Netty 创建的时候注册进服务中,然后在数据进站、出站的不同阶段,调用这个类中不同的回调函数,以处理不同的开发需求。可以关注一下读者其他的文章

3.Future:

jdk-Future:Java 中提供了 Future 的实现,这种 Futrue 可以看作是一个异步操作结果的占位符。我们可以通过这个 Future 查询到这个异步操作的结果,并进行一些处理。比如在操作失败的时候抛出异常。但是 jdk 内置的 Future 的查询只能在某个时刻手动去查询结果,或者直接阻塞这个异步操作,直到异步完成操作之后可以查询 Future 的成功或者失败。

ChannelFuture:Netty 内部提供的 Future 实现类,很多异步操作在执行的时候都会返回一个 ChannelFuture 对象,我们可以针对这个 ChannelFuture 对象设置一些回调函数,比如重写 operationComplete() 方法,这样这个异步事件在完成的时候会自动调用这个方法,并且执行我们自己的处理逻辑。

接下来可以看一下 ChannelFuture 的应用实例,检测 Netty 服务器链接远程地址是否成功:

Channel channel = "";
// 链接地址 192.168.100.113 的 7000 端口
InetSocketAddress socketAddress = new InetSocketAddress("192.168.100.113",7000);
// 管道绑定地址并返回一个 ChannelFuture
ChannelFuture channelFuture = channel.connect(socketAddress);
// 给 ChannelFuture 设置完成回调,判断这个操作是否完成
channelFuture.addListener(new ChannelFutureListener(){
		@override
		public void operationComplete(ChannelFuture future){if(future.isSucess()){
				// 创建一个字符串,并指定所使用的字符集,下面这种写法是 Netty 中经常遇到的
				ByteBuf buffer = Unpooled.copiedBuffer("Hello",Charset.defaultCharset());
				// 发送信息并且返回一个新的 writeFuture,依旧可以根据这个 writeFuture 处理一些逻辑
				ChannelFuture writeFuture = future.channel().writeAndFlush(buffer);
			}else{
				// 链接失败则答应出失败的消息
				Throwable cause = future.cause();
				cause.printStackTrace();}
		}
})
五、总结

Netty 以一种异步事件驱动以及回调的方式,能帮我们快速完善服务器处理数据的进出,以及各个流程细节中的处理逻辑。极大的精简了服务器开发人员在,链接处理,数据出入方面的开发工作。是一个及其易用且稳定的网络开发框架。

到此这篇关于 Java 游戏服务器系列之 Netty 相关知识总结的文章就介绍到这了

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-25发表,共计2488字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7976913
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
仅2MB大小!开源硬件监控工具:Win11 无缝适配,CPU、GPU、网速全维度掌控

仅2MB大小!开源硬件监控工具:Win11 无缝适配,CPU、GPU、网速全维度掌控

还在忍受动辄数百兆的“全家桶”监控软件?后台偷占资源、界面杂乱冗余,想查个 CPU 温度都要层层点选? 今天给...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
如何免费使用强大的Nano Banana Pro?附赠邪修的用法

如何免费使用强大的Nano Banana Pro?附赠邪修的用法

如何免费使用强大的 Nano Banana Pro?附赠邪修的用法 前言 大家好,我是星哥,今天来介绍谷歌的 ...
国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号 AI 知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率 大家好,我是星哥,...
星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛 NAS 硬件 02:某鱼 6 张左右就可拿下 5 盘位的飞牛圣体 NAS 前言 大家好,我是星...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸 前言 作为天天跟架构图、拓扑图死磕的...
星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的NAS中!

星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的NAS中!

星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的 NAS 中! 大家对「数据安全感」的需求越来越高 ...
你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你 为什么要用宝塔跑分? 宝塔跑分其实就是对 CPU、内存、磁盘、IO 做...
三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

  三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Andr...
让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级

让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级

让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级 大家好,我是星哥,之前写了一篇文章 自己手撸一...