深入阅读Mina源码(3) —— Mina之IOAdapter(二)
(接:深入阅读Mina源码(3) —— Mina之IOAdapter(一))
?
4.?AbstractPollingIoAcceptor
?
? ? ?这个类在org.apache.mina.core.polling,这个包一共有四个类,这个类就可以代表整个包的内容了,细致说一下,之后就不再深入介绍这个包了。从名字可以看出包里面的类主要完成轮询。
? ? ?AbstractPollingIoAcceptor主要完成了AbstractIoAcceptor定义的实际实现方法,如unbind0、bindInternal、dispose0,另外下方了一些更细致的accept、open、select、colse方法让子类实现,也清晰的可以看出它主要为Socket提供父类的一些实现,同时也有了NIO的影子。
? ? ?看一下AbstractPollingIoAcceptor的属性字段,可以看到
?
?
?
? ? 主要的两个方法把父类中的注释写一下,方便理解,看了注释再看代码就比较容易想明白了:
?
? ? bindInternal:Starts the acceptor, and register the given addresses
? ? unbind0:Implement this method to perform the actual unbind operation.
?
?
5. NioSocketAcceptor
?
? ? 终于,到这个最终的类了,我们也将要看到作为NIO部分我们最希望看到的一系列东西。看到导入的一堆java.nio.channels.*感觉好舒服,马上整个流程的谜底既要揭开了。代码非常少,更欣慰。
?
?
protected ServerSocketChannel open(SocketAddress localAddress) throws Exception { // Creates the listening ServerSocket ServerSocketChannel channel = ServerSocketChannel.open(); boolean success = false; try { // This is a non blocking socket channel channel.configureBlocking(false); // Configure the server socket, ServerSocket socket = channel.socket(); // Set the reuseAddress flag accordingly with the setting socket.setReuseAddress(isReuseAddress()); // and bind. socket.bind(localAddress, getBacklog()); // Register the channel within the selector for ACCEPT event channel.register(selector, SelectionKey.OP_ACCEPT); success = true; } finally { if (!success) { close(channel); } } return channel;}??
?
6. final
?
? ? 感觉第一次阅读整个开源框架,还有些把握不住主线和方法,使得整个博文我看起来也有点杂乱无章的感觉,但希望有助于一步步看代码的嘶吼帮助下理解和把握整体逻辑吧。接下来几天还要考试,又要好哈复习了,抽了一晚上时间弄完了这部分代码,感觉两次看代码中间时间间隔太长是有很大影响了,还是应该连续的看一部。好了,不多说了,希望有帮助,复习去了,几天后继续阅读下一部分代码。
?
?