游戏服务端核心是socket服务,而java提供了传统的bio与nio,而要满足服务端的高性能与高并发无疑要选择nio作为开发首选.
什么是nio
nio即non-blocking io,nio是基于事件驱动思想的,实现上通常采用Reactor模式.当程序发起io的读或者写操作时是非阻塞的,当socket有流可读入或者可写入时,操作系统会通知应用程序进行处理,处理完后再将流再写回缓冲区或者操作系统.对于网络io来说,主要是连接建立,流读取与流写入三种事件.需要注意的是,linux 2.6以后的版本采用epoll方式实现nio.
什么是aio
aio即async io,同样aio也是基于事件驱动思想的,但实现上通常采用Proactor模式.当程序发起io的读或者写操作时是异步的,只需要调用相应的read或者write方法.当socket有流可读入时,操作系统会将流传入read方法缓冲区,并通知应用程序,而当流有可写入时,操作系统会将流写入完毕后通知应用程序.相比nio,aio不仅简化了开发,而且省去了遍历Selector的代价.但aio只在java 7中提供,而我们目前还是先研究java 6中的nio.
阅读全文…