Netty 是一个客户端服务器框架,它基于jdk nio开发。
Netty home.
Netty 样例代码如下
客户端
// Configure the client.
ClientBootstrap bootstrap = new ClientBootstrap(
new NioClientSocketChannelFactory(
Executors.newCachedThreadPool(),
Executors.newCachedThreadPool()));
// Set up the pipeline factory.
bootstrap.setPipelineFactory(new ChannelPipelineFactory() {
public ChannelPipeline getPipeline() throws Exception {
return Channels.pipeline(
new EchoClientHandler(firstMessageSize));
}
});
// Start the connection attempt.
ChannelFuture future = bootstrap.connect(new InetSocketAddress(host, port));
// Wait until the connection is closed or the connection attempt fails.
future.getChannel().getCloseFuture().awaitUninterruptibly();
// Shut down thread pools to exit.
bootstrap.releaseExternalResources();
服务器端
// Configure the server.
ServerBootstrap bootstrap = new ServerBootstrap(
new NioServerSocketChannelFactory(
Executors.newCachedThreadPool(),
Executors.newCachedThreadPool()));
// Set up the pipeline factory.
bootstrap.setPipelineFactory(new ChannelPipelineFactory() {
public ChannelPipeline getPipeline() throws Exception {
return Channels.pipeline(new EchoServerHandler());
}
});
// Bind and start to accept incoming connections.
bootstrap.bind(new InetSocketAddress(port));
}
处理流程
NioClientSocketPipelinesink由NioClientSocketChannelFactory创建,责任是分发事件处理
AbstractNioSelector是netty心脏,下面是客户端的AbstractNioSelector实现,包括NioClientBoss,NioWorker,没有画出的部分是服务器端的NioServerBoss,他们的职责及其区别如下流程
NioClientBoss,NioServerBoss,NioWorker联系与区别如下。
如上所述NioClientSocketPipelinesink和NioServerSocketPipelinesink分别处理客户端服务器端的由Boostrap触发的事件,有本事身为AbstractNioSelector的Boss线程NioClientBoss,NioServerBoss处理,NioClientBoss处理OP_CONNECT,NioServer处理OP_ACCEPT。
NioClientBoss完成连接后,交由NioWorker线程处理;NioWorker在连接之前已经创建
NioServerBoss接受到多个连接后,交由NioWorker线程处理;NioWorker在接受到连接后创建。递交给NioWorker的方式通过注册到NioWorker任务队列中,当有后续的交互操作时NioWorker会处理任务队列
分享到:
相关推荐
基于事件的 NIO 多线程服务器
基于事件的_NIO_多线程服务器
JDK1.4提供的无阻塞I/O(NIO)有效解决了多线程服务器存在的线程开销问题,但在使用上略显得复杂一些。许多基于NIO的多线程服务器程序往往直接基于选择器(Selector)的Reactor模式实现。这种简单的事件机制对于较...
NIO用于高性能Socket编程由来已久,网络也有较为丰富的原理和源代码。我这里主要介绍几点经验总结: ...本文粘贴多线程在NIO环境下的基本运用示例代码,同时演示了一个线程如何对多个连接进行读写的操作。
多线程NIO客户端实例
一个java的nio服务器,用多线程实现。
深入Hotspot源码与Linux内核理解NIO与Netty线程模型
NULL 博文链接:https://iakuxgnaw.iteye.com/blog/1985333
该包封装过的NIO比sun本身的更容易处理 server中只有区区几行就搞定了: //创建listener TimeHandler timer = new TimeHandler(); //获取Notifier Notifier notifier = Notifier.getNotifier(); //注册监听 notifier....
本工程源码。 博文链接:https://techno-it.iteye.com/blog/224553
实现功能:基于HTTP协议,解析请求和拼接响应,基于NIO的非阻塞,线程池,文件传输。代码有详细注释和清晰的框架。 程序入口是: /HttpServerReactor/src/com/StartServer.Java 访问1,浏览:...
基于NIO的多线程聊天系统,代码很少,很经典,51CTO网站上的代码。有登陆和聊天界面。代码结构层次清晰,系统只有6个类。
NULL 博文链接:https://1358440610-qq-com.iteye.com/blog/2115715
java多线程程序设计:Java NIO+多线程实现聊天室 Java基于多线程和NIO实现聊天室 涉及到的技术点 线程池ThreadPoolExecutor 阻塞队列BlockingQueue,生产者消费者模式 Selector Channel ByteBuffer ProtoStuff 高...
使用NIO socket不需要多线程来处理多个连接的请求,效率非常高 可以作为NIO socket入门的例子,Reactor模式,重点理解key.attach, jar文件里包含了源代码 1,运行server.bat启动服务器,可以打开编辑,修改端口号 ...
多线程精品资源--Java NIO+多线程实现聊天室
NIO_RandomAccessFile_多线程读本地CSV文件(java==> google guava包ListenableFuture) reader里有个main函数,更改文件路径后,直接运行即可
Java NIO可以让你非阻塞的使用IO,例如:当线程从通道读取数据到缓冲区时,线程还是可以进行其他事情。当数据被写入到缓冲区时,线程可以继续处理它。从缓冲区写入通道也类似。 Java NIO: Selectors(选择器) ...
如果你是开发服务器端的程序,java nio 是一个很好的选择,流I/O的效率大家是知道的
设计思想: 每次通过nio读取字节到 fbb中 然后对fbb自己中的内容进行行判断即 10 回车 13 行号 0 文件结束 这样字节的判断,然后 返回行 如果 到达 fbb的结尾 还没有结束,就再通过nio读取一段字节,继续处理。 ...