1、Socket
Socket又称“套接字”,应用程序通过“套接字”向网络发出请求或者应答网络请求。
Socket和ServerSocket类库位于java.net包中。ServerSocket用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,不因为在服务器端或客户端而产生不同级别。不管是Socket还是ServerSocket,它们的工作都是通过SocketImpl类及其子类完成的。
2、Socket连接过程
服务器监听:是服务端套接字,并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。
客户端请求服务器:是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。
服务器端连接确认:当服务器端套接字监听或者说接受到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务端的套接字的描述发给客户端。
客户端连接确认:一旦客户端确认了此描述,连接就建立好了,双方开始进行通信。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。
3、传统的BIO编程
网络编程的基本模型是Client/Server模型,也就是两个进程直接进行相互通信,其中服务端提供配置信息(绑定的IP地址和监听端口),客户端通过连接操作向服务器端监听的地址发起连接请求,通过三次握手建立连接,如果连接成功,则双方即可以进行通信(网络套接字Socket)。(需要为每个连接维护一个线程)
4、伪异步IO
采用线程池和任务队列可以实现一种伪异步的IO通信框架
将客户端的socket封装成一个task任务(实现runnable接口的类),然后投递到线程池中去,配置相应的队列进行实现。
5、BIO、NIO、AIO的区别
BIO为同步阻塞形式,NIO为同步非阻塞形式,NIO没有实现异步,在JDK1.7之后,升级了NIO库包,支持异步非阻塞通信模型,即NIO2.0(AIO)
三种IO的总结:http://blog.csdn.net/wanzaixiaoxinjiayou/article/details/43274597
6、阻塞与非阻塞
阻塞概念:应用程序在获取网络数据的时候,如果网络传输速度很慢,那么程序就一直等着,直到传输完毕为止。