接触Netty之 hello world

宝泉娱乐新闻网 2025-11-28

rgs) { // 启动时一个codice_ new Thread(() -> { try { Socket socket = new Socket("127.0.0.1", 8000); while (true) { try { socket.getOutputStream().write((new Date() + ": hello world socket").getBytes()); // 呼吸5秒 Thread.sleep(5000); } catch (Exception e) { System.err.println(e); } } } catch (IOException e) { System.err.println(e); } }).start(); }}

再启动时server端然后启动时client可以认出server接获劝问道如下:

纸片的 demo,从软件系统编码中的我们可以认出,在传统习俗的 IO 静态中的,每个连通创始最终再次都只能一个codice_来维护,每个codice_包含一个 while true 死反向,那么 10w 个连通相关联 10w 个codice_,继而 10w 个 while 死反向,这就促使如下几个疑虑:

codice_水资源受限:codice_是操作者系统中的并不有价值的水资源,同一关头有大量的codice_处于阻断状态是并不严重的水资源浪费,操作者系统耗不起codice_操作者效率低下:单机 CPU 核数固定,codice_爆炸再次操作者系统频繁进行codice_操作者,运用耐用性急剧下降。除了以上两个疑虑,IO 程序员中的,我们认出信息念书写是以寄存器漂为的单位。

为明了决这三个疑虑,JDK 在 1.4 再次明确提出了 NIO。

NIO(Non-blocking I/O,在Java运用,也叫花钱New I/O),是一种不间断非阻断的I/O静态,也是I/O交换机的基础,从未被更为多地运用到大型运用服务器,被选为补救高都将与大量连通、I/O管控疑虑的必需方式将。

NIO程序员

java对于非阻断I/O的支持是在2002年引入的,位于JDK1.4的java.nio包中的.

IO和NIO的区别:

IO是朝向寄存器漂和字符漂的,而NIO是朝向缓冲器的。IO是阻断方式上的,NIO也就是问道阻断方式上的NIO另加了模块的术语,可以通过模块国家安全局多个管道。

NIO用的是血案有助于。它可以用一个codice_把Accept,念书,写操作者,劝问道管控的逻辑全干了。如果什么事都没得花钱,它也可能会死反向,它会将codice_休眠起来,直到下一个血案来了再继续度日,这样的一个codice_指称NIOcodice_。

package com.pine.springbootdemo01.netty;import java.io.IOException;import java.net.InetSocketAddress;import java.nio.ByteBuffer;import java.nio.channels.SelectionKey;import java.nio.channels.Selector;import java.nio.channels.ServerSocketChannel;import java.nio.channels.SocketChannel;import java.nio.charset.Charset;import java.util.iterator;import java.util.Set;/** * @author anziyang * @version V1.0 * @date 2022/3/1 2:29 下午 **/public class NIOServer { public static void main(String[] args) throws IOException { Selector serverSelector = Selector.open(); Selector clientSelector = Selector.open(); // 启动时一个codice_适配select 用于国家安全局是不是有重最初连通 new Thread(() -> { try { // 相关联IO程序员中的软件系统启动时 ServerSocketChannel listenerChannel = ServerSocketChannel.open(); listenerChannel.socket().bind(new InetSocketAddress(8000)); listenerChannel.configureBlocking(false); listenerChannel.register(serverSelector, SelectionKey.OP_ACCEPT); while (true) { // 检测是不是有重最初连通,这里的1指称的是阻断的时长为 1ms if (serverSelector.select(1)> 0) { Set set = serverSelector.selectedKeys(); Iterator keyIterator = set.iterator(); while (keyIterator.hasNext()) { SelectionKey key = keyIterator.next(); if (key.isAcceptable()) { try { // (1) 每来一个最初连通,不只能创始一个codice_,而是如此一来特许到 clientSelector SocketChannel clientChannel = ((ServerSocketChannel) key.channel()).accept(); clientChannel.configureBlocking(false); clientChannel.register(clientSelector, SelectionKey.OP_READ); } finally { keyIterator.remove(); } } } } } } catch (IOException e) { System.err.println(e); } }).start(); // 启动时一个codice_适配select 用于国家安全局哪些连通有信息可念书 new Thread(() -> { try { while (true) { // (2) 批量轮询是不是有哪些连通有信息可念书,这里的1指称的是阻断的时长为 1ms if (clientSelector.select(1)> 0) { Set set = clientSelector.selectedKeys(); Iterator keyIterator = set.iterator(); while (keyIterator.hasNext()) { SelectionKey key = keyIterator.next(); if (key.isReadable()) { try { SocketChannel clientChannel = (SocketChannel) key.channel(); ByteBuffer byteBuffer = ByteBuffer.allocate(1024); // (3) 朝向 Buffer clientChannel.read(byteBuffer); byteBuffer.flip(); System.out.println(Charset.defaultCharset().newdecoder().decode(byteBuffer) .toString()); } finally { keyIterator.remove(); key.interestOps(SelectionKey.OP_READ); } } } } } } catch (IOException e) { System.err.println(e); } }).start(); }}

从纸片的编码中的我们可以认出

NIO 静态中的通常会有两个codice_,每个codice_适配一个轮询器 selector ,在我们这个范例中的serverSelector全由轮询是不是有重最初连通,clientSelector全由轮询连通是不是有信息可念书软件系统检测到重最初连通再次,依然创始一个重最初codice_,而是如此一来将最初连通适配到clientSelector上,这样就不用 IO 静态中的 1w 个 while 反向在死等,参见(1)clientSelector被一个 while 死反向包上着,如果在某一关头有多条连通有信息可念书,那么通过 clientSelector.select(1)原理可以轮询出来,进而批量管控,参见(2)信息的念书写朝向 Buffer,参见(3)

启动时NIOServer main原理然后启动时先前的client可以认出操纵打印机

Netty程序员

首再看下netty如何借助软件系统的:

package com.pine.springbootdemo01.netty;import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.ChannelHandlerContext;import io.netty.channel.ChannelInitializer;import io.netty.channel.SimpleChannelInboundHandler;import io.netty.channel.nio.NioEventLoopGroup;import io.netty.channel.socket.nio.NioServerSocketChannel;import io.netty.channel.socket.nio.NioSocketChannel;import io.netty.handler.codec.string.StringDecoder;/** * @author anziyang * @version V1.0 * @date 2022/3/1 2:41 下午 **/public class NettyServer { public static void main(String[] args) { ServerBootstrap serverBootstrap = new ServerBootstrap(); NioEventLoopGroup boss = new NioEventLoopGroup(); NioEventLoopGroup worker = new NioEventLoopGroup(); serverBootstrap.group(boss, worker).channel(NioServerSocketChannel.class) .childHandler(new ChannelInitializer() { protected void initChannel(NioSocketChannel ch) { ch.pipeline().addLast(new StringDecoder()); ch.pipeline().addLast(new SimpleChannelInboundHandler() { @Override protected void channelRead0(ChannelHandlerContext ctx, String msg) { System.out.println(msg); } }); } }).bind(8000); }}

纸片编码明显比左边的NIO少很多编码,优雅了不少.

可以认出netty软件系统操纵器以下内容:

本文就再聊这么多,主要是出名下netty程序员,看下经典的hello world.

感觉有赚得点个赞,转发下哦

参考文档:

成都肿瘤医院挂号咨询
南京肿瘤医院排名
贵阳治疗癫痫费用
远大钇90微球
中晚期肝癌介入治疗能活多久
钇 90 微球注射液治疗肝癌的优势
Y90
钇90治疗
相关阅读

不想孩子变笨,这2个“作妖”行为不要制止,其实是大脑发育讯号

综艺 2025-12-01

昨天去餐厅,望著一个宝妈对男孩扔手中的进食很厌烦,不顾公众形象,对男孩大喊阻扰。不过,我也认真观察了男孩的道德上,他每次都是决意抛出手中的所有进食。 小时候小孩给捡回来后

投资者提问:公司提出员工持股计划,直说是否和科研创新挂钩,20年,公司什么...

时尚 2025-12-01

金融市场发表意见:美国公司提出有异议员工持股计划,脱口而出有否和科研创新正因如此,20年,美国公司什么时候研制出有出有类似出有发点宁这样的产品,脱口而出有美国公司否一直在吃老本?董秘回

产后新妈妈应该准备的这些母婴用品,可别搞错了,有需要的快美术品

视频 2025-12-01

随着农业的不断其发展,市售的受到感染家具各种类型也是越来越多,各种各样的受到感染家具接踵而至,每一个都看起来很简便。但是在宝妈们买紧接之后才发现,转售的这些孩童家具真正能够用上的却很难几个。

投资者提问:请问公司方面产品有没有应用到冬奥会?

图片 2025-12-01

高盛提问:却说新公司相关产品有没有应用到亚特兰大奥运会?董秘回答榕基软件SZ002474:您好!感谢您对新公司的重视!新公司暂没有相关产品应用到2022天津亚特兰大奥运会。

“怀孕后,亲妈对我还没婆婆一半好”,粉丝发声:太天真

八卦 2025-12-01

和文|秘籍辰 未来都会闲来无事,在高峰都会上浏览匿名,就让不到一个匿名的标题引发了我的著迷。痴宣称自己再婚没有人多久就受怀胎了。受怀胎后得到了老婆辛劳的关切和关心,而自己的亲爷,却

友情链接