摘要:写个简单点,比较小白的文档,言语比较接地气是什么的高层封装,很难写,所以有了,方便异步的操作的主要代码片段按照代码顺序解释如下事件循环队列,用来接受或发送事件。
写个简单点,比较小白的文档,言语比较接地气
Netty是什么?
NIO的高层封装,NIO很难写,所以有了Netty,方便异步的操作
service的主要代码片段
public void run() throws Exception { EventLoopGroup bossGroup = new NioEventLoopGroup(); // (1) EventLoopGroup workerGroup = new NioEventLoopGroup(); try { ServerBootstrap b = new ServerBootstrap(); // (2) b.group(bossGroup, workerGroup) .channel(NioServerSocketChannel.class) // (3) .childHandler(new ChannelInitializer() { // (4) @Override public void initChannel(SocketChannel ch) throws Exception { ch.pipeline().addLast(new DiscardServerHandler()); } }) .option(ChannelOption.SO_BACKLOG, 128) // (5) .childOption(ChannelOption.SO_KEEPALIVE, true); // (6) // Bind and start to accept incoming connections. ChannelFuture f = b.bind(port).sync(); // (7) // Wait until the server socket is closed. // In this example, this does not happen, but you can do that to gracefully // shut down your server. f.channel().closeFuture().sync(); } finally { workerGroup.shutdownGracefully(); bossGroup.shutdownGracefully(); } }
按照代码顺序解释如下
(1) EventLoopGroup bossGroup = new NioEventLoopGroup();
事件循环队列,用来接受或发送事件。大家可以把他想象成邮局,消息都要先到邮局,然后再分发出去,邮局维护了一个循环队列,用来不断的收信和发信。
(2)ServerBootstrap b = new ServerBootstrap();
启动服务
(3) b.group(bossGroup, workerGroup).channel(NioServerSocketChannel.class)
开启了一个通道,这个通道是用来接受连接请求的,管道大家都知道吧,IO里也有,NIO中也有,一切Java中到处都是管道
(4).childHandler(new ChannelInitializer
这个handler是用来表示响应什么样的事件的,比如我们这里DiscardServerHandler,随着程序的复杂,你会加上更多的handle,handler是具体干事的人
(5).option(ChannelOption.SO_BACKLOG, 128)
channel的配置参数,具体可以查手册
(6).childOption(ChannelOption.SO_KEEPALIVE, true);
option()是 NioServerSocketChannel的配置,childOption()是被parent ServerChannel接受的channel,这里就指的是NioServerSocketChannel
(7)ChannelFuture f = b.bind(port).sync();
绑定端口并开始
再看看我们主要进行事件处理的handle
public class DiscardServerHandler extends ChannelHandlerAdapter { // (1) @Override public void channelRead(ChannelHandlerContext ctx, Object msg) { // (2) // Discard the received data silently. ((ByteBuf) msg).release(); // (3) } @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { // (4) // Close the connection when an exception is raised. cause.printStackTrace(); ctx.close(); } }
(1)DiscardServerHandler extends ChannelHandlerAdapter
表示:俺是具体干事的人
(2)我们overrider了 channelRead(),用来读取接受到的信息
(3)异常处理,懂的...
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/69978.html
摘要:请回复这个帖子并注明组织个人信息来申请加入。权限分配灵活,能者居之。数量超过个,在所有组织中排名前。网站日超过,排名的峰值为。导航归档社区自媒体平台微博知乎专栏公众号博客园简书合作侵权,请联系请抄送一份到赞助我们 Special Sponsors showImg(https://segmentfault.com/img/remote/1460000018907426?w=1760&h=...
摘要:的选择器允许单个线程监视多个输入通道。一旦执行的线程已经超过读取代码中的某个数据片段,该线程就不会在数据中向后移动通常不会。 1、引言 很多初涉网络编程的程序员,在研究Java NIO(即异步IO)和经典IO(也就是常说的阻塞式IO)的API时,很快就会发现一个问题:我什么时候应该使用经典IO,什么时候应该使用NIO? 在本文中,将尝试用简明扼要的文字,阐明Java NIO和经典IO之...
时间:2018年04月11日星期三 说明:本文部分内容均来自慕课网。@慕课网:https://www.imooc.com 教学源码:https://github.com/zccodere/s... 学习源码:https://github.com/zccodere/s... 第一章:课程介绍 1-1 课程介绍 什么是Netty 高性能、事件驱动、异步非阻塞的IO Java开源框架 基于NIO的客户...
阅读 2584·2023-04-25 20:50
阅读 3929·2023-04-25 18:45
阅读 2213·2021-11-17 17:00
阅读 3323·2021-10-08 10:05
阅读 3073·2019-08-30 15:55
阅读 3487·2019-08-30 15:44
阅读 2355·2019-08-29 13:51
阅读 1111·2019-08-29 12:47