socketchannel不能通过tcp读写网络中的数据_Java-彻底弄懂netty-程序员深入NIO之SocketChannel基础-知识铺...

知识铺: 致力于打造轻知识点,持续更新每次的知识点较少,阅读不累。不占太多时间,不停的来唤醒你记忆深处的知识点。

一、Socket与NioSocket

1.1 普通Socket 一个连接独占一个线程。

1.2 NioSocket 引入selector一个线程对应多个连接。

1.3 普通socket资源利用率不高,如果某个socket延迟,服务端对应的线程就会等待,服务器线程是有限的,也很昂贵的资源。

1.4 优化普通socket也只是有限的的提升,如下图:

本质上还是一个socket对应一个socket

71f4449c5f53c32ed3d15db3ddb87202.png

1.5 NioSocket 引入三个概念。

Buffer:合并多个请求包,一次性发送。

Selector:多路选择器,可以应对多个客户端请求。

Channel:真正处理和响应的是通道。

1a4111931270b1955e7df4eb3a449e61.png

二、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 特定参数如下:

c05b405d097025fe3d9f8e0d4cee55df.png

Nagle算法在网络带宽有限,引出来的算法。当下网络带宽宽裕,不需要,一般该算法是默认关闭的,所以目前的TCP/IP协议栈默认将Nagle算法关闭,即通过SO_NODELAY = 1。

感觉有收获给点个赞,给小编动力。

如果没有收获,请评论区狠狠的批评,给小编更大的动力。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值