一.套接字:
1.定义:源IP地址和目的IP地址、源端口号和目的端口号的组合称为套接字。其用于标识客户端请求的服务器和服务。
它是网络通信过程中端点的抽象表示,包含进行网络通信的五个必备信息:连接使用的协议、本地主机IP地址、本地进程协议端口号、目的IP地址、目的进程协议端口号。
2.主要参数:区分不同应用程序进程间的网络通信和连接,主要有三个参数:使用的目的IP地址、使用的传输层协议(TPC、UDP)和使用的端口号。
1 BIO编程
- 传统的BIO编程采用C/S模型,是两个进程间的通讯。
- 客户端向服务端监听的地址发出请求,在三次握手连接之后通过socket套接字进行通讯。
- 传统的同步阻塞模型开发中,ServerSocket负责绑定IP地址,启动监听端口;Socket负责发起连接操作,连接成功后,双方通过输入和输出流进行同步阻塞通讯。
- 通常服务端有一个Acceptor进程,每当有一个客户端请求,如果Acceptor接受之后就新建一个线程,处理完成后,通过输出流返回应答给客户端,线程销毁。每个线程的处理流程(读取数据、解码、处理、编码、发送响应)
- BIO最大的缺点就是会产生很多的线程,占用很多资源。当客户端并发访问量增加后,服务端的线程个数就和客户端成1:1的关系。系统性能随之降低。
2 伪异步IO
- 传统的IO,每来一个请求就创建一个线程,不适合高并发量请求处理。
- 伪异步IO就是把每个请求丢进请求队列中,服务器端增加了一个线程池,用线程池来管理这些线程,实现1个或多个线程处理N个客户端的模型。
NIO编程
- Non-block IO
- NIO提供了与传统BIO模型中的Socket和ServerSocket对应的SocketChannel和ServerChannel两种不同的套接字通道实现。
- 新增的两种通道都支持阻塞和非阻塞两种方式
- 对于低负载、低并发的应用程序,可以使用BIO来提升开发速率和更好的维护;对于高负载、高并发的网络应用,可以使用BIO的非阻塞模式开发。
Channel分为两大类
- SelectableChannel:用户网络读写
- FileChannel:文件读写
三个核心API:
- Channels
- Buffers
- Selectors
NIO与BIO的最大区别就是,BIO是面向流的,NIO是面向缓冲的。
AIO编程