知识铺: 致力于打造轻知识点,持续更新每次的知识点较少,阅读不累。不占太多时间,不停的来唤醒你记忆深处的知识点。
一、Socket与NioSocket
1.1 普通Socket 一个连接独占一个线程。
1.2 NioSocket 引入selector一个线程对应多个连接。
1.3 普通socket资源利用率不高,如果某个socket延迟,服务端对应的线程就会等待,服务器线程是有限的,也很昂贵的资源。
1.4 优化普通socket也只是有限的的提升,如下图:
本质上还是一个socket对应一个socket
1.5 NioSocket 引入三个概念。
Buffer:合并多个请求包,一次性发送。
Selector:多路选择器,可以应对多个客户端请求。
Channel:真正处理和响应的是通道。
二、SocketChannel 是什么
2.1 SocketChannel是一个socket套接字。
2.2 连接网络协议:TCP。
2.3 主要处理网络I/O通道。
2.4 实现可选择通道或被多路复用通道。
三、SocketChannel 特点
3.1 已连接的socket无法创建SocketChannel。
3.2 open只是创建channel通道,并没进行网络连接。
3.3 connect连接远程地址
3.4 无连接channel不能进行I/O(read(),write())
抛出异常 NotYetConnectedException
isConnected():测试下网络是否建立连接。
isConnectedPending():连接是否在信道上发起。
finishConnect():非阻塞下需要该接口进行通道确认。
3.5 SocketChannel 支持两种I/O:阻塞与非阻塞
3.6 SocketChannel 特定参数如下:
Nagle算法在网络带宽有限,引出来的算法。当下网络带宽宽裕,不需要,一般该算法是默认关闭的,所以目前的TCP/IP协议栈默认将Nagle算法关闭,即通过SO_NODELAY = 1。
感觉有收获给点个赞,给小编动力。如果没有收获,请评论区狠狠的批评,给小编更大的动力。
领取专属 10元无门槛券
私享最新 技术干货