关于java socket 、java NIO和apeche mina的小差别 新手帖 大神请指导
本人最近在学习mina,一直纠结与socket有什么不同之处 mina的优点在哪里。
在一番搜索之后讲述Java Nio与mina的差别的文章倒是很多。
下面我试着说说我自己的理解,希望了解这方面的大虾能指点一二 ,本人小菜鸟一个,请赐教。
java socket
使用java socket进行网络编程,在打开一个I/O通道后,read()将一直等待在端口一边读取字节内容,如果没有内容进来,read()也是傻傻的等,这会影响我们程序继续做其他事情,那么改进做法就是开设线程,让线程去等待,但是这样做也是相当耗费资源的。
Java NIO
Java NIO非堵塞技术实际是采取Reactor模式,或者说是Observer模式为我们监察I/O端口,NIO 有一个主要的类Selector,这个类似一个观察者,如果有内容进来,会自动通知我们,这样,我们就不必开启多个线程死等,从外界看,实现了流畅的I/O读写,不堵塞了。
apeche mina
传统的 Java NIO 模型,都是典型的反应式模型,即应用代码对 I/O 描述符进行注册,然后等待 I/O 事件。当某个或某些 I/O 描述符所对应的 I/O 设备上产生 I/O 事件(可读、可写、异常等)时,系统将发出通知,于是应用便有机会进行 I/O 操作并避免阻塞。由于在反应式模型中应用代码需要根据相应的事件类型采取不同的动作,最常见的结构便是嵌套的 if {...} else {...} 或 switch ,并常常需要结合状态机来完成复杂的逻辑。前摄式模型则恰恰相反。在前摄式模型中,应用代码主动地投递异步操作而不管 I/O 设备当前是否可读或可写。投递的异步 I/O 操作被系统接管,应用代码也并不阻塞在该操作上,而是指定一个回调函数并继续自己的应用逻辑。当该异步操作完成时,系统将发起通知并调用应用代码指定的回调函数。在前摄式模型中,程序逻辑由各个回调函数串联起来:异步操作 A 的回调发起异步操作 B ,B 的回调再发起异步操作 C ,以此往复。 Mina 便是一个前摄式的异步 I/O 框架
总结来说 mina不仅解决了java socket的阻塞问题 而且优化了 java nio应用逻辑代码复杂的结构问题,使用mina开发一个网络应用程序框架,用来帮助用户简单地开发高性能和高可靠性的网络应用程序。这样也就凸显了mina的优势 不知道小弟说的对不对 大虾请指点