首页 > 编程语言 >网络编程基础

网络编程基础

时间:2023-05-24 23:25:35浏览次数:33  
标签:异步 调用 协议 编程 基础 阻塞 网络 同步 连接

OSI七层模型

应用层:ttp协议、电子文件传输、文件服务器等

表示层:解决我们不同系统之间语法的通讯

会话层:建立与应用程序之间的通讯

传输层:提供了端口号和接口协议TPC/UDP

网络层:为数据包选择路由器、交换机

定义了ip地址,可以根据ip地址找到对应的服务器

数据链路层:传输有地址的帧以及错误检测功能

物理层:以二进制形式,在物理机器上实现传输

TCP与UDP协议

Socket

Socket(套接字)是两个程序之间通过双向信道进行数据交换的端,可以理解为接口。使用Socket编程也称为网络编程,Socket只是接口并不是网络通信协议。

TCP与UDP区别

TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议

TCP协议应用场景:HTTP、HTTPS、FTP协议

UDP是面向无连接通讯协议,udp通讯时不需要接受方确定,属于不可靠传输,可能会存在丢包的现象。

UDP协议应用场景:QQ语音、QQ视频

连接与短连接区别

短连接:每次请求完了之后都会关闭连接,如果频繁发送请求的情况下效率是非常低。

长连接:每次发送完请求之后,该请求不会立马断开,实现复用类似于线程池

Http协议1.0: 规定客户端与浏览器保持短暂的连接,服务器完成数据传输数据之后就会立马关闭连接,如果频繁的向服务器端发送请求的话,这时候是非常消耗服务器资源。

Http协议1.1: Http协议从1.1开始就支持长连接,会根据特定时间保持当前连接状态,不会立马关闭掉tcp连接; 

Http协议建立长连接之后,默认情况下在300s为空闲状态情况下会主动断开连接;

BIO,NIO,AIO 模型

1、BIO(Blocking I O) 同步阻塞模型,一个线程对应一个客户端连接。

应用场景:

BIO 方式适用于连接数目比较小且固定的架构, 这种方式对服务器资源要求比较高, 但程序简单易理解。

 2、NIO(Non Blockin g IO) 同步非阻塞,

服务器实现模式为一个线程可以处理多个请求(连接),客户端发送的连接请求都会注册到 多路复用器selector上,多路复用

器轮询到连接有IO请求就进行处理。

应用场景:

NIO方式适用于连接数目多且连接比较短(轻操作) 的架构, 比如聊天服务器, 弹幕系统, 服务器间通讯,编程比较复杂, JDK1.4 开始支持

 3、AIO(NIO 2.0) 异步非阻塞,

由操作系统完成后回调通知服务端程序启动线程去处理, 一般适用于连接数较多且连接时间较长的应用。是在NIO的基础上进一步封装的。

应用场景:

AIO方式适用于连接数目多且连接比较长(重操作) 的架构,JDK7 开始支持

 

同步和异步的区别

同步也就是程序从上往下实现执行; 单线程

异步从新开启一个新分支,相互不会影响;多线程

站在Http协议上分析同步与异步区别:

我们的Http协议请求默认情况下同步形式调用,如果调用过程非常耗时的情况下客服端等待时间就非常长这种形式我们可以理解阻塞式;

解决办法:耗时的代码我们可以使用多线程或者MQ实现处理,但是不能立马获取结果客服端可以主动查询

同步与异步描述的是被调用者的。

譬如A调用B。

如果是同步,B在接到A的调用后,会立即执行要做的事。A的本次调用可以得到结果。

如果是异步,B在接到A的调用后,不保证会立即执行要做的事,但是保证会去做,B在做好了之后会通知A。A的本次调用得不到结果,但是B执行完会通知A。

阻塞与非阻塞描述的是调用者的。

如果是阻塞,A在发出调用后,要-直等待,等着B返回结果。
如果是非阻塞, A在发出调用后,不需要等待,可以去做自己的事情。
同步不-定阻塞,异步也不一定非阻塞。没有必然关系。
举个简单的例子,老张烧水: 
1.老张把水壶放到火上, - -直在水壶旁等着水开。(同步阻塞 )
2.老张把水壶放到火上,去客厅看电视,时不时去厨房看看水开没有。(同步非阻塞 )
3.张把响水壶放到火上,- 直在水壶旁等着水开。(异步阻塞)
4.老张把响水壶放到火上,去客厅看电视,水壶响之前不再去看它了,响了再去拿壶。(异步非阻塞 )
1和2的区别是,调用方在得到返回之前所做的事情不一样。
1和3的区别是,被调用方对于烧水的处理不-样。

 

标签:异步,调用,协议,编程,基础,阻塞,网络,同步,连接
From: https://www.cnblogs.com/lsnotbug/p/17429839.html

相关文章

  • 使用 StarCoder 创建一个编程助手
    如果你是一个软件开发者,你可能已经使用过ChatGPT或GitHub的Copilot去解决一些写代码过程中遇到的问题,比如将代码从一种语言翻译到另一种语言,或者通过自然语言,诸如“写一个计算斐波那契数列第N个元素的Python程序”,来自动生成代码。尽管这些专有系统功能强大,但它们仍然有......
  • 理解数据报文在网络设备中的传输细节
    数据报文在网络设备中是如何传输的呢?且听我娓娓道来。这么说吧,本文讲述的是数据报文在普通的二层或三层设备即交换机或路由器之间的传输过程,不涉及防火墙一类网络设备间的传输场合。请看下图,这是一个简易的网络结构,由一台路由器两台交换机组成。假设各设备的MAC地址、IP地址为图......
  • R语言中的Stan概率编程MCMC采样的贝叶斯模型|附代码数据
    原文链接:http://tecdat.cn/?p=11161最近我们被客户要求撰写关于贝叶斯模型的研究报告,包括一些图形和统计输出。概率编程使我们能够实现统计模型,而不必担心技术细节。这对于基于MCMC采样的贝叶斯模型特别有用R语言中RStan贝叶斯层次模型分析示例stan简介Stan是用于贝叶斯推理......
  • 代码生成器-可根据自己项目生成基础代码
    publicclassCodeService{publicstringBuild(BuildInputDtoinput){varassembly=Assembly.GetExecutingAssembly();varresourceName=assembly.GetManifestResourceNames().FirstOrDefault(a......
  • 打卡 c语言趣味编程 列出真分数序列
    问题描述:按递增顺序依次列出所有分母为40,分子小于40的最简分数。分子、分母只有公因数1的分数叫做最简分数或者说分子和分母是互质数的分数,叫做最简分数,又称既约分数,如2/3,8/9,3/8等。思路:求分子小于40的最简分数,对分子采用穷举的方法。根据最简分数定义知:分子分母的......
  • MySQL学习基础篇Day9
    6.事务6.1事务简介事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。就比如:张三给李四转账1000块钱,张三银行账户的钱减少1000,而李四银行账户的钱要增加1000。这一组操......
  • 【CPP0049】以Point类及平面基类Plane类为基础设计圆类Circle并实现相关文件操作
    基于Point类及平面基类Plane类,设计圆类Circle,并为Point类和Circle重载实现<<和>>运算符,main(void)函数实现Point对象和Circle对象的文件读写操作。@Point类结构说明: Point类的数据成员包括:①私有数据成员:X坐标x(double型),Y坐标y(double型)。Point类成员函数包括:①有参构造......
  • 网络安全基础
       ......
  • 2023.5.24编程一小时打卡
    一、问题描述:已知Horse类是Pegasus类的父类,根据以下主函数完善程序内容,以实现规定的输出。不允许改变主函数的内容。intmain(){Horse*p1=newHorse;//输出:Horse申请了空间...Horse*p2=newPegasus;/*输出两行:Horse申......
  • 实验4 函数与异常处理编程
    print(sum)sum=42print(sum)definc(n):sum=n+1print(sum)returnsumsum=inc(7)+inc(7)print(sum)四处sum作用域不同。第一个是内置函数名称,第二个是赋值名称,第三个是局部变量,第四个是全局变量list1=[1,9,8,4]print(sorted(list1))print......