![对几种WinSockIO模型的总结_第1页](http://file3.renrendoc.com/fileroot_temp3/2022-1/16/51bd6d37-451c-489f-ba35-d53c5f046b85/51bd6d37-451c-489f-ba35-d53c5f046b851.gif)
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、对几种winsockio模型的总结(以下仅是学习中的心得体味,加入了自己的理解,不敢保证彻低正确,有错误的地方希翼指出。) 1,什么是socket 普通来说,网络通信都是不同的机器在进程级别举行的,如我们在自己的电脑上通过xx软件客户端同服务器上的xx软件数据库衔接,查看信息或者下载新版本。互联网上有很多个这样的通信,那么如何去辨别它们?从一台机器的角度来看,一个5元组可以确定这样的一个通信:1,本机的ip地址,互联网上各个机器是唯一的;2,本地端口号,这是用来分辨消息是同这台机器上哪个程序相关的;3,远端ip地址;4,远端端口号;5,用的是什么通信协议。这5个元素形成一个通信链,socket
2、就是这样一个通信链的句柄(unix/linux是文件标识符,其实都是一个意思)。以tcp为例(udp类似,更容易),服务器端基本流程为(括号内为所用函数):1) 建立一个监听socket(socket)2) 绑定到某个端口(bind)3) 监听,等待客户端的衔接哀求(listen)4) 客户端有衔接哀求,在当前的监听socket上再建立一个衔接socket用于后续的通信(accept)5) 服务器端同客户端交换信息(send和recv)6) 通信完成,关闭用于通信的socket和监听socket客户端的基本流程则是:1) 建立一个通信socket2) 向服务器发送衔接哀求(connect)3)
3、 服务器端同客户端交换信息(send和recv)4) 通信完成,关闭用于通信的socket客户端没有绑定端口的过程,并不是不绑定,只是会由socket隐式绑定,固然也可以自己指定。由此,一个socket对应一个端口,因为大部分程序所用端口是固定的,这就相当于不同的端口对应了不同的服务。socket原意就是多孔插座,软件用法哪个socket,就好似将插头插入了哪个插座,就是用法了哪个端口,就是用法了哪种服务,就是同哪个机器在通信。socket是来自unix/linux的概念,winsock是对其的扩展,但基本思路全都。 2,为什么需要socket io模型 上节所说的过程显然只能对应1个服务器、
4、1个客户端的通信,假如想多客户端并发,可以在服务器端循环3到5步,即服务器循环监听客户端的衔接哀求、建立衔接、然后接发数据。问题是假如某个客户端传送数据耗时过长,或者衔接了总不传,recv函数就会死等,后面的客户端就会长时光得不到服务,这种相应是不行接受的。于是又想到,对于每个客户端,都建立一个新的线程,即一个衔接socket一个线程,主线程只负责建立衔接,通信的任务交给子线程。这样,无论某个客户端传不传数据或者是传多久的数据,都不会影响别的客户端。这在并发数小的状况下可行,但是当并发数多的时候,系统将耗费大量的时光在线程的上下文切换。究竟,所谓的并发不是并行,不是真的有几个线程就几个线程同时
5、运行,而是每个轮番在cpu上跑一会。这样的切换是很耗费资源的。这种形式被称作同步堵塞式,为了解决这个问题,unix/linux下有select函数,winsock继承了这个办法,同时提出了一些在windows环境下新的io模型已提高高并发时候的响应并降低资源消耗。 3,同步和异步、堵塞和非堵塞 介绍socket io模型前,还有2对概念要明确:同步和异步、堵塞和非堵塞。容易地说,同步和异步是指消息的通知机制,堵塞和非堵塞是指等待消息时的状态。详细来说,同步和异步是指所关注的消息如何通知,关注的消息如是否可以举行io、io完成有否,同步是消息的处理者自己去等待消息是否触发,异步是由触发机制来通知
6、消息的处理者。而堵塞和非堵塞指在我们所关注的消息到来前,我们能否去做别的事情,可能是同步(这个时候就需要我们不停的来看看消息是否触发了),也可能是异步(这个时候就不用看了,有消息触发会由特地的机制来通知我们)。所以这两对概念是彻低无关的。同步可以非堵塞(只是此时相对于同步堵塞,实际上没有任何优势),异步也可以堵塞(只不过通常不是在处理消息时堵塞,而是在等待消息被触发时被堵塞。如我在编写select形式socket demo时候,将select最后一个out设为了无限等待,只要关注的大事没有触发,程序就会向来堵塞在这个select调用处,终于的结果就是后续的衔接有可能要等待前面的衔接发送数据后服
7、务器端才干收到它发送的数据)。总之,异步非堵塞是并发时好的挑选,用ioctocket函数设置后,全部的winsock api都会立即返回,这不仅提高了各个客户端的响应速度,同时可以按照返回的信息去获得此时io的状态。 4,select形式 unix/linux下有同名函数,同样的用法办法。容易的说就是检查,在io前检查下这个socket是否可用,不行用就不io。所以网上对select是否属于异步也有不同的声音,认为它是同步的说它需要我们自己去轮询地检查socket是否可用,认为它是异步的说虽然要自己检查,但是是通过特定的fd_和select函数检验的,可以认为这是一种通知机制。select的基本用法办法:fd_set是一个socket集合,有四个宏操纵它: fd
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 湘师大版道德与法治九年级下册3.1《多民族的大家庭》听课评课记录
- 教科版道德与法治八年级上册6.2《公民的责任》听课评课记录
- 鲁教版数学六年级上册2.1《0科学计数法》听评课记录
- 岳麓版历史七年级上册第18课《汉代的科技与文化》听课评课记录
- 苏科版数学九年级下册5.1《二次函数》讲听评课记录
- 五年级数学听评课记录表
- 人教版九年级数学上册第二十二章二次函数《22.2二次函数与一元二次方程》第1课时听评课记录
- 【2022年新课标】部编版七年级上册道德与法治第六课 交友的智慧 2课时听课评课记录
- 韩式餐厅承包经营合同范本
- 个人入股分红协议书范本
- 2025年电力铁塔市场分析现状
- 中国服装零售行业发展环境、市场运行格局及前景研究报告-智研咨询(2025版)
- 临床提高脓毒性休克患者1h集束化措施落实率PDCA品管圈
- GB/T 3478.1-1995圆柱直齿渐开线花键模数基本齿廓公差
- GB/T 1346-2001水泥标准稠度用水量、凝结时间、安定性检验方法
- FZ/T 25001-2012工业用毛毡
- 瑞幸咖啡SWOT分析
- DL∕T 1867-2018 电力需求响应信息交换规范
- 小学生品德发展水平指标评价体系(小学)
- 水利工程地震应急预案
- 日历表空白每月打印计划表
评论
0/150
提交评论