摘要:寫個簡單點(diǎn),比較小白的文檔,言語比較接地氣是什么的高層封裝,很難寫,所以有了,方便異步的操作的主要代碼片段按照代碼順序解釋如下事件循環(huán)隊(duì)列,用來接受或發(fā)送事件。
寫個簡單點(diǎn),比較小白的文檔,言語比較接地氣
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();
事件循環(huán)隊(duì)列,用來接受或發(fā)送事件。大家可以把他想象成郵局,消息都要先到郵局,然后再分發(fā)出去,郵局維護(hù)了一個循環(huán)隊(duì)列,用來不斷的收信和發(fā)信。
(2)ServerBootstrap b = new ServerBootstrap();
啟動服務(wù)
(3) b.group(bossGroup, workerGroup).channel(NioServerSocketChannel.class)
開啟了一個通道,這個通道是用來接受連接請求的,管道大家都知道吧,IO里也有,NIO中也有,一切Java中到處都是管道
(4).childHandler(new ChannelInitializer
這個handler是用來表示響應(yīng)什么樣的事件的,比如我們這里DiscardServerHandler,隨著程序的復(fù)雜,你會加上更多的handle,handler是具體干事的人
(5).option(ChannelOption.SO_BACKLOG, 128)
channel的配置參數(shù),具體可以查手冊
(6).childOption(ChannelOption.SO_KEEPALIVE, true);
option()是 NioServerSocketChannel的配置,childOption()是被parent ServerChannel接受的channel,這里就指的是NioServerSocketChannel
(7)ChannelFuture f = b.bind(port).sync();
綁定端口并開始
再看看我們主要進(jìn)行事件處理的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)異常處理,懂的...
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/69978.html
摘要:請回復(fù)這個帖子并注明組織個人信息來申請加入。權(quán)限分配靈活,能者居之。數(shù)量超過個,在所有組織中排名前。網(wǎng)站日超過,排名的峰值為。導(dǎo)航歸檔社區(qū)自媒體平臺微博知乎專欄公眾號博客園簡書合作侵權(quán),請聯(lián)系請抄送一份到贊助我們 Special Sponsors showImg(https://segmentfault.com/img/remote/1460000018907426?w=1760&h=...
摘要:的選擇器允許單個線程監(jiān)視多個輸入通道。一旦執(zhí)行的線程已經(jīng)超過讀取代碼中的某個數(shù)據(jù)片段,該線程就不會在數(shù)據(jù)中向后移動通常不會。 1、引言 很多初涉網(wǎng)絡(luò)編程的程序員,在研究Java NIO(即異步IO)和經(jīng)典IO(也就是常說的阻塞式IO)的API時,很快就會發(fā)現(xiàn)一個問題:我什么時候應(yīng)該使用經(jīng)典IO,什么時候應(yīng)該使用NIO? 在本文中,將嘗試用簡明扼要的文字,闡明Java NIO和經(jīng)典IO之...
時間:2018年04月11日星期三 說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):https://www.imooc.com 教學(xué)源碼:https://github.com/zccodere/s... 學(xué)習(xí)源碼:https://github.com/zccodere/s... 第一章:課程介紹 1-1 課程介紹 什么是Netty 高性能、事件驅(qū)動、異步非阻塞的IO Java開源框架 基于NIO的客戶...
閱讀 2598·2023-04-25 20:50
閱讀 3961·2023-04-25 18:45
閱讀 2231·2021-11-17 17:00
閱讀 3337·2021-10-08 10:05
閱讀 3086·2019-08-30 15:55
閱讀 3503·2019-08-30 15:44
閱讀 2365·2019-08-29 13:51
閱讀 1121·2019-08-29 12:47