首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java-彻底弄懂netty-程序员深入Nio之SocketChannel基础-知识铺

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

一、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。

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

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190811A0LCP500?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券