Socket回顾与I/0模型

      最后更新:2022-07-31 15:43:23 手机定位技术交流文章

      1、Socket网络编程回顾

      1.1.索克概览

      Socket,一个插座是两个主机之间的逻辑连接点。TCP/IP协议是层级协议,问题主要在于如何在网络中传输数据,HTTP是一个应用层协议,主要问题是数据如何包装。插座是通信的基础.它是支持TCP/IP协议的网络通信的基本操作单元。它是网络通信过程中的终端的抽象表现,它包含了网络通信所需的五个信息:连接使用的协议、本地主机的IP地址、本地进程的协议端口、远程主机的IP地址和远程进程的协议端口。

      1.2.索克总过程

      接口编程主要涉及客户和服务的最终方面,首先是在服务器端创建一个服务器套接字(ServerSocket),并把它连接到一个港口,服务器从这个端口监视连接。端口数从0到65536之间,但0到1024是特权服务所保留的端口号码,您可以选择目前没有被其他进程使用的任何终端。

      客户端请求与服务器进行连接的时候,根据服务器的域名或者IP地址,加上端口号,打开一个套接字。当服务器接受连接后,服务器和客户端之间的通信就像输入输出流一样进行操作。

      1.3、代码实现

      服务端代码

      客户端代码

      2、I/O模型

      2.I/O模型描述

      1. 一个简单的理解I/O模型是发送和接收数据的渠道是什么,这在很大程度上决定了程序通信的性能
      2. Java支持三个网络编程模型/IO模型: BIO(同步和阻塞),NIO(同步和阻塞),AIO(同步和阻塞)。

      阻塞与非阻塞

      主要指一种处理线程访问IO块(或等待)线程访问资源的方法,该资源是否准备运行

      同步和异步

      请求数据的主要方式
      同步和非同步是访问数据的机制

      2.BIO(同步和阻塞)

      Java BIO是一个传统的插座编程.

      BIO(blocking I/O) :同步封锁,服务器实现模式是一个连接到一个线程,即服务器端需要启动一个线程来处理当客户端有一个连接请求,如果连接没有造成不必要的线程费用,它可以通过线程池机制(实现多个客户端连接服务器)来改进。

      工作机制

      BIO问题分析

      1. 每个请求都需要创建独立的线程,与对应的客户端进行数据 Read,业务处理,数据 Write
      2. 当同时的数目较大时,需要创建大量线程来处理连接,系统资源较大
      3. 连接成立后,如果当前线程有一段时间没有可读数据,线程将阻断读取操作,造成线程资源的浪费

      2.3,NIO(同步非阻塞)

      同步非阻塞,服务器实现模式为一个线程处理多个请求(连接),即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有 I/O 请求就进行处理

      2.AIO(同步非阻塞)

      AIO引入了非同步通道的概念,采用了Proactor模式,简化了程序编写,并要求一个有效的请求启动线程,其特征是通知终端程序在操作系统完成之前启动线程,一般适用于更多的连接和较长的连接时间

      Proactor模式是消息不准确通知的设计模式,而Proactor通知不是预备事件,而是操作完成事件,是操作系统不准确IO的主要模式。

      2.5,BIO,NIO,AIO可应用场景分析

      • BIO(同步和封锁)方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,但程序简单易理解
      • NIO(同步非阻塞)方式适用于连接数目多且连接比较短(轻操作)的架构,比如聊天服务器,弹幕系统,服务器间通讯等。编程比较复杂,JDK1.4 开始支持
      • AIO(同步非阻塞)该方法在具有更多的连接和较长的连接(重操作)的架构中使用,例如文件夹服务器,完全调用OS参与合作,编程更加复杂,JDK7开始支持它。

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/31038.html

          热门文章

          文章分类