Netty入门:HelloWorld示例与基础配置

需积分: 50 10 下载量 50 浏览量 更新于2024-07-22 收藏 1.78MB PDF 举报
Java NIO (New Input/Output) 是一种非阻塞I/O模型,它在Java平台上的实现主要通过java.nio包提供的类和接口来完成,提高了并发性和性能。Netty是一个广泛使用的高性能、异步事件驱动的网络应用框架,特别适用于构建高性能的服务器端应用,如WebSocket、RPC等。 在Java NIO框架Netty教程中,首先介绍的是Netty的基本概念和用途。Netty提供了一种基于事件驱动的编程模型,它允许开发者专注于业务逻辑,而将底层的网络连接管理和IO操作交由框架处理。其设计目标是简化网络编程,提高开发效率,并且能够很好地支持分布式和高并发环境。 在开始学习时,教程作者强调了Netty的核心组件,包括ServerBootstrap,这是Netty用于配置和服务端应用启动的主要工具。Bootstrap实例化时,通过NioServerSocketChannelFactory创建了一个线程池,一个用于处理I/O操作,另一个用于执行任务,体现了Netty的异步非阻塞特性。 接下来的代码示例是HelloServer类,它演示了如何创建一个最简单的Netty服务器,该服务器监听8000端口。`ChannelPipeline`是Netty中的核心管道,它是事件处理器链,负责接收、处理和发送数据。在这个例子中,`HelloServerHandler`是自定义的处理器,负责处理客户端的连接和数据交互。 在`ChannelPipelineFactory`中,通过`getPipeline()`方法创建并配置了整个管道,确保每个连接都会实例化一个`HelloServerHandler`对象。这意味着每当有新的客户端连接时,Netty会自动创建一个新的`HelloServerHandler`实例来处理后续的通信。 当HelloServer启动后,它会进入一个无限循环,等待新连接的到来。当客户端发起连接请求时,Netty的事件循环机制会触发相应的事件,进而调用`HelloServerHandler`的方法,实现了最基本的“Hello World”交互,即服务器接收到连接后,可能会向客户端发送一条问候消息。 总结来说,这段Java NIO框架Netty教程的第一部分重点介绍了Netty的基本架构和启动流程,以及如何利用`ServerBootstrap`和`ChannelPipeline`来创建一个简单的服务器端程序。通过这个例子,读者可以初步理解如何使用Netty进行网络通信,并掌握基本的事件处理机制。后续的教程可能会深入探讨更多的Netty功能,如多路复用器、连接管理、协议解析等,帮助读者更全面地掌握这个强大的框架。

2023-07-13 09:15:56,872 WARN org.apache.flink.runtime.dispatcher.DispatcherRestEndpoint [] - Unhandled exception java.io.IOException: Connection reset by peer at sun.nio.ch.FileDispatcherImpl.read0(Native Method) ~[?:1.8.0_372] at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:39) ~[?:1.8.0_372] at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223) ~[?:1.8.0_372] at sun.nio.ch.IOUtil.read(IOUtil.java:192) ~[?:1.8.0_372] at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:379) ~[?:1.8.0_372] at org.apache.flink.shaded.netty4.io.netty.buffer.PooledByteBuf.setBytes(PooledByteBuf.java:253) ~[flink-dist-1.15.3.jar:1.15.3] at org.apache.flink.shaded.netty4.io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:1132) ~[flink-dist-1.15.3.jar:1.15.3] at org.apache.flink.shaded.netty4.io.netty.channel.socket.nio.NioSocketChannel.doReadBytes(NioSocketChannel.java:350) ~[flink-dist-1.15.3.jar:1.15.3] at org.apache.flink.shaded.netty4.io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:151) [flink-dist-1.15.3.jar:1.15.3] at org.apache.flink.shaded.netty4.io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:719) [flink-dist-1.15.3.jar:1.15.3] at org.apache.flink.shaded.netty4.io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:655) [flink-dist-1.15.3.jar:1.15.3] at org.apache.flink.shaded.netty4.io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:581) [flink-dist-1.15.3.jar:1.15.3] at org.apache.flink.shaded.netty4.io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493) [flink-dist-1.15.3.jar:1.15.3] at org.apache.flink.shaded.netty4.io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986) [flink-dist-1.15.3.jar:1.15.3] at org.apache.flink.shaded.netty4.io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) [flink-dist-1.15.3.jar:1.15.3] at java.lang.Thread.run(Thread.java:750) [?:1.8.0_372]

2023-07-14 上传

com.fmall58.wechatsub.business.bizs.UException at com.fmall58.wechatsub.business.service.PubService.isBindWeChatSub(PubService.java:76) at com.fmall58.wechatsub.business.bizs.PubHelper.isBindWeChatSub(PubHelper.java:125) at com.fmall58.wechatsub.business.bizs.PubHelper.execute(PubHelper.java:38) at com.fmall58.wechatsub.server.handlers.ServerHandler.channelRead(ServerHandler.java:103) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340) at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340) at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:323) at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:297) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340) at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1434) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:965) at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:163) at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:656) at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:591) at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:508) at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:470) at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:909) at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)

2023-06-11 上传