netty源码分析

Netty5源码分析--2.客户端启动过程

怎甘沉沦 提交于 2019-11-30 19:03:47
实例 样例代码来自于 io.netty.example.telnet.TelnetClient ,完整样例请参考NettyExample工程。 客户端和服务端比较相似,所以本篇会在一定程度上略去重复的部分,以减少篇幅。 public void run() throws Exception { EventLoopGroup group = new NioEventLoopGroup(); try { Bootstrap b = new Bootstrap(); b.group(group) .channel(NioSocketChannel.class) .handler(new TelnetClientInitializer()); // Start the connection attempt. Channel ch = b.connect(host, port).sync().channel(); // Read commands from the stdin. ChannelFuture lastWriteFuture = null; BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); for (;;) { String line = in.readLine(); if (line

Netty5源码分析--4.总结

半世苍凉 提交于 2019-11-27 10:37:11
JAVA NIO 复习 请先参考我之前的博文 JAVA学习笔记--3.Network IO 的 NIO(NonBlocking IO) SOCKET 章节。这里主要讲下JAVA NIO其中几个比较被忽略的细节,不求全,欢迎补充。 API Select 当调用 ServerSocketChannel.accept(); 时,如果该channel处于非阻塞状态而且没有等待(pending)的连接,那么该方法会返回null;否则该方法会阻塞直到连接可用或者发生I/O错误。此时实际上Client发送了connect请求并且服务端是处于non-blocking模式下,那么这个accept()会返回一个不为null的channel。 当调用 SocketChannel.connect() 时,如果该channel出于non-blocking模式,只有在本地连接下才可能立即完成连接,并返回true;在其他情况下,该方法返回false,并且必须在后面调用 SocketChannel.finishConnect 方法。如果 SocketChannel.finishConnect 的执行结果为true,才意味着连接真正建立。 SocketChannel.write() 方法内部不涉及缓冲,它直接把数据写到socket的send buffer中。 坑 每次迭代selector.keys()完时