• 网络编程@Socket网络编程


    • 传统的同步阻塞式IO编程、伪异步IO实现
      • Socket
        • Socket即套接字,通过TCP3次握手,4次挥手实现,建立连接的过程分为4个步骤
          • 服务器监听
            • 服务端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络的状态
          • 客户端请求服务器
            • 客户端的套接字提出连接请求,要连接的目标是服务端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器套接字所在的IP和端口号,然后就向服务器套接字发送连接请求
          • 服务器确认
            • 当服务器套接字监听到(接收到)客户端套接字的连接请求时,它就响应客户端套接字的请求,建立一个新的线程,把服务端套接字的描述发送给客户端
          • 客户端确认
            • 一旦客户端确认了此描述,连接就建立好了。双方开始进行通信,而服务端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求
        • 传统Socket的缺点
          • 每次建立了连接,都会起一个新的线程对这个连接进行通信处理,那么,当连接的数量增大的时候,会消耗很大的性能,而且连接的建立也是非常有限的
      • 伪异步IO实现
        • 解决了每次建立连接都要建立线程的问题
        • 解决方式:线程池+队列
    • 基于NIO的同步非阻塞式编程(Non-Block IO)
      • 阻塞和非阻塞:
        • 阻塞:程序在获取网络数据的时候,如果网络数据还没有完全发送完毕,那么程序会一直等待着,知道传输完成才进行进一步处理
        • 非阻塞:程序直接获取已经准备就绪的网络数据,无需等待
      • 同步和异步:
        同步和异步一般是面向操作系统与应用程序对IO操作的层面上来区别的
        • 同步:同步时,应用程序会直接参与IO读写操作,并且我们的应用程序会直接阻塞到某个方法上,直到数据准备就绪,或者采用轮询的策略实时检查数据的就绪状态,如果就绪则获取数据
        • 异步:异步时,则所有的IO读写操作就给操作系统处理,与我们的应用程序没有直接关系,我们的程序不需要关心IO读写,当操作系统完成了IO读写操作时,会给我们的应用程序发送通知,我们的应用程序直接拿走数据即可
          ** 同步和阻塞 **
        • 同步说的是Server服务端的执行方式
        • 阻塞说的是具体的技术,接收数据的方式、状态(NIO/IO)
      • IO和NIO的区别:
        • 本质:IO是阻塞式的,NIO是非阻塞式的
      • Buffer缓冲区
        • Buffer是一个对象,实际上是一个数组,通常它是一个字节数组(ByteBuffer),它包含了一些要写入或者读取的数据,并提供了访问和操作数据的API
        • 除了Boolean,每一个基本数据类型都对应了一个缓冲区,但是最常用的还是ByteBuffer
          ByteBuffer/CharBuffer/ShortBuffer/IntBuffer/LongBuffer/FloatBuffer/DoubleBuffer
        • 在NIO类库中加入Buffer对象,体现了新库与原IO的一个重要区别
          • 在面向流的IO中,可以将数据直接写入或读取到stream对象中
          • 在NIO库中,所有数据都是用缓冲区读写的
      • Channel管道/通道
      • Selector选择器/多路复用器
      • NIO本质
        • 避免原始的TCP建立连接使用3次握手的操作,减少连接的开销
    • 基于NIO2.0的异步非阻塞式(AIO)编程
      • AIO不需要通过多路复用器对通道进行轮询操作即可实现读写,因此是异步的,简化了NIO编程模型

  • 相关阅读:
    Leetcode 421.数组中两数的最大异或值
    Leetcode 419.甲板上的战舰
    Leetcode 417.太平洋大西洋水流问题
    Leetcode 416.分割等和子集
    Leetcode 413.等差数列划分
    Leetcode 410.分割数组的最大值
    由股票价格形成因素看如何选股(发布于06-02 13:09)
    巴菲特的资产配置艺术(发布于06-01 13:28)
    ROE能否包打天下?(发布于05-31 11:27)
    价值迟迟不回归怎么办?(发布于05-30 10:02)
  • 原文地址:https://www.cnblogs.com/qq438649499/p/12111964.html
Copyright © 2020-2023  润新知