很长时间对mina的实现非常好奇,这两天不太忙,把源代码认真看了下,基本上搞清楚了,记一下备忘,顺便说一下网上那么多阅读mina的sb,我不知道他们最终是弄懂了还是没懂,总之我看他们的大块文章总是没有看代码来的快来的直接。
1. acceptor runnable in pollingimpl
负责接受请求,随后转给processor。
pollingimpl有一个selector,一个线程池,一个SimpleProcessorPool(这个pool中有cpu+1那么多processor,他们共用另一个线程池,每一个都有自己的selector)
2. processor runnable in pollingimpl
负责读写,服务器端和客户端重用它。
它是上边那个池子中的一员,1接受后创建session并扔给了2
3. connector runnable in pollingimpl
调用socketchannel.connect后如果返回true,创建session并扔给2;否则注册到selector,被1接受后再扔给2。
一个selector,一个线程池,一个SimpleProcessorPool
这是内部的框架实现。剩下用户需要定义的就是filter和handler了。还有一些config,sessiondictionaryfactory,等等,你可以忽略。