纯净、安全、绿色的下载网站

首页|软件分类|下载排行|最新软件|IT学院

当前位置:首页IT学院IT技术

Java Netty Java游戏服务器系列之Netty相关知识总结

张山大人   2021-05-24 我要评论
想了解Java游戏服务器系列之Netty相关知识总结的相关内容吗张山大人在本文为您仔细讲解Java Netty的相关知识和一些Code实例欢迎阅读和指正我们先划重点:Java,Netty简介,Java,Netty用法下面大家一起来学习吧。

一、简介

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


相关文章

猜您喜欢

  • 程序员SQL 语句 程序员最实用的 SQL 语句收藏看完这篇就够了

    想了解程序员最实用的 SQL 语句收藏看完这篇就够了的相关内容吗熬过无人问津的日子才会有远方在本文为您仔细讲解程序员SQL 语句的相关知识和一些Code实例欢迎阅读和指正我们先划重点:程序员SQL,语句,程序员实用SQL,语句下面大家一起来学习吧。..
  • python 制作Web可视化页面 python使用Streamlit库制作Web可视化页面

    想了解python使用Streamlit库制作Web可视化页面的相关内容吗法纳斯特在本文为您仔细讲解python 制作Web可视化页面的相关知识和一些Code实例欢迎阅读和指正我们先划重点:python,Web可视化,python,Streamlit,python,可视化页面下面大家一起来学习吧。..

网友评论

Copyright 2020 www.Shellfishsoft.com 【贝软下载站】 版权所有 软件发布

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 点此查看联系方式