Netty4.0.36使用入门
来源:互联网 发布:ebay销售数据采集 编辑:程序博客网 时间:2024/05/29 19:42
以前曾经阅读过Netty的源代码,对其整体的IO,线程模型都还算是比较了解,但是感觉以前的东西都忘记了,而且当时读的时候也比较乱,所以这次准备再重新走一遍,因为5.0版本的正式版还没有出来,所以就选择了4.0.36final版本。。。
最开始还是先看看最简单的使用吧,做一个简单的http服务器,返回hello world
先创建一个Handler来处理读取的数据:
package fjs;import io.netty.buffer.ByteBuf;import io.netty.buffer.ByteBufAllocator;import io.netty.channel.ChannelHandlerContext;import io.netty.channel.ChannelInboundHandler;import io.netty.channel.ChannelInboundHandlerAdapter;import java.nio.charset.Charset;/** * Created by fjs-alienware on 2016/5/22. */public class InHandler extends ChannelInboundHandlerAdapter { /** * * @param ctx 当前连接的上下文环境 * @param msg 其实是读取到的数据 * @throws Exception */ @Override public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { ByteBuf buf = (ByteBuf)msg; System.out.println(buf.toString(Charset.forName("UTF8"))); ByteBuf outBuf = ByteBufAllocator.DEFAULT.buffer(); outBuf.writeBytes("hello world".getBytes()); ctx.writeAndFlush(outBuf); buf.release(); ctx.close(); }}
这里在channelRead方法里面来处理读取到的数据,代码也很简单,将读取到的数据打印出来,然后发送hello world数据,并关闭连接,这样在在浏览器里面就可以看到 hello world字符了
那么接下来需要一个服务器的启动入口:
package fjs;import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.ChannelFuture;import io.netty.channel.ChannelInitializer;import io.netty.channel.ChannelOption;import io.netty.channel.EventLoopGroup;import io.netty.channel.nio.NioEventLoop;import io.netty.channel.nio.NioEventLoopGroup;import io.netty.channel.socket.SocketChannel;import io.netty.channel.socket.nio.NioServerSocketChannel;/** * Created by fjs-alienware on 2016/5/22. */public class Fjs { public static void main(String args[]) { EventLoopGroup bossGroup = new NioEventLoopGroup(); /***监听channel将会放到这个ioLoop里面去*/ EventLoopGroup workerGroup = new NioEventLoopGroup(); /**接收到的外部channel将会在这个里面处理**/ try { ServerBootstrap b = new ServerBootstrap(); /** * 初始化服务器环境 */ b.group(bossGroup, workerGroup).channel(NioServerSocketChannel.class).childHandler(new ChannelInitializer<SocketChannel>() { /** * 接收到新的连接将会调用这里来对channel进行初始化 * @param ch 获取到的外部连接 * @throws Exception */ @Override protected void initChannel(SocketChannel ch) throws Exception { ch.pipeline().addLast(new InHandler()); } }).option(ChannelOption.SO_BACKLOG, 128).option(ChannelOption.SO_KEEPALIVE, true); ChannelFuture f = b.bind(8000).sync(); f.channel().closeFuture().sync(); /**等待监听socket的关闭**/ } catch (InterruptedException e) { e.printStackTrace(); } finally { bossGroup.shutdownGracefully(); workerGroup.shutdownGracefully(); } }}
好像整个API还是比较稳定的,跟自己以前读的时候并没有太大的变化,好久没有写Java代码了,有点手生啊。
0 0
- Netty4.0.36使用入门
- Netty4 1_netty入门
- netty4.0使用
- Netty4 使用总结
- netty4初步使用
- netty4 UDP的使用
- netty4.x FixedChannelPool使用
- 使用Spring+Maven配置Netty4
- Netty4框架的初步使用
- 使用Netty4实现基本的消息分发
- Netty4.0中LengthFieldBasedFrameDecoder的使用心得
- 使用Netty4实现基本的消息分发
- netty4 tcp与protobuf3的整合使用。
- 使用spring容器管理和配置netty4
- Netty4实战第十三章:使用UDP
- 使用netty4 和 protobuf2.6.1进行网络通信
- 【Netty4.X】Unity与Netty使用protoBuf(四)
- NIO 框架Netty4.x 整体流程和使用
- Unity3D-基础小知识(二)
- junit测试环境搭建(遇到的坑)
- Java实现HTTP多线程下载功能app
- android:descendantFocusability用法简析
- Leetcode--Flatten Binary Tree to Linked List
- Netty4.0.36使用入门
- FPGA模块端口连接规则
- CodeForces #589 B Layer Cake 类似01背包的模拟题
- 完全解决MyEclipse运行中可能存在的乱码问题
- Python调用R语言
- IOS 获取系统信息
- Caffe学习4-利用caffe.proto自定义自己的网络
- c/c++向函数传递指针并修改其指向的问题
- Linux学习之环境变量