摘要:寫個簡單點,比較小白的文檔,言語比較接地氣是什么的高層封裝,很難寫,所以有了,方便異步的操作的主要代碼片段按照代碼順序解釋如下事件循環隊列,用來接受或發送事件。
寫個簡單點,比較小白的文檔,言語比較接地氣
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)異常處理,懂的...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/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
閱讀 2214·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