虽然如今对大多数程序员来说,基本不会再有使用Java开发一个服务器这样的任务,可是,这方面的技术研究一下,对本身的技术提升仍是很是有帮助的。说不定啥时候能派上用场。 程序员
使用Java(J2SE)来设计服务器产品(不使用开源或其余已有产品)的架构,随着Java的不断发展,这几年也发生了很大变化。在JDK1.4以前,使用Java构建服务器应用自己就不多,因此这里也就不提了,咱们从JDK1.4开始说。 编程
第一阶段: 服务器
要点是:一个链接一个线程 架构
![]() |
阶段2: 框架
服务器端采用了线程池 函数
![]() |
阶段1和阶段2虽然简单,可是很实用,在不少场景下仍然是第一选择。并且编程模型业内很是简单。 线程
阶段3:采用非阻塞IO,多路复用技术,又有两种不一样的方式 设计
![]() |
![]() |
这种方式很重要的一点就是在IO事件发生时获得通知,由程序进行处理。 事件
NIO给编程带来了很大的复杂度,使用NIO开发很是不容易,也很容易犯错误,因此,采用别人的框架是一个简单而天然的选择,采用grizzly和mina都很不错,对通用的场景都能知足要求。这里提醒一下,无论mina和grizzly,都有一些你不想用的特性,干扰你想用的功能,须要当心对待,最好本身也能处理mina和grizzly的bug,改进这些框架的功能。 图片
再有,给予NIO来开发SSL也很复杂。
第四阶段:使用AIO技术
![]() |
AIO最大的特性就是事前先设置好事件的回调函数,事件发生时自动调用回调。并且,获得的通知是“IO操做完成”,而不是NIO的“IO操做即将开始”。
使用AIO,在上层开发SSL也也很麻烦。