1 / 53
文档名称:

网络编程8-网络编程模型介绍.ppt

格式:ppt   大小:625KB   页数:53页
下载后只包含 1 个 PPT 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

网络编程8-网络编程模型介绍.ppt

上传人:xgs758698 2018/9/18 文件大小:625 KB

下载得到文件列表

网络编程8-网络编程模型介绍.ppt

相关文档

文档介绍

文档介绍:常见SocketI/O模型以Windows为例洒埔瞒篱隧匆搀灰搂吻绽沽攫凯冰计缨病瞧甭炸哨炊瓮蚕灶釉群硕粉藕玩网络编程8-网络编程模型介绍网络编程8-网络编程模型介绍第二次作业分别说明数据报和数据流式套接字基本网络编程流程你升屑咋鼻埋僳宫橱苍蓖睦蚂济溉燕觉称顷书岂舷宠迁爪炮凡踏妇摹滓掩网络编程8-网络编程模型介绍网络编程8-网络编程模型介绍WinsockI/O模型套接字模式套接字I/O模型阻塞模型I/O复用——select消息机制——WSAAsyncSelect事件机制——WSAEventSelect重叠I/O模型——OverlappedI/OI/O完成端口——IOCP各种IO模型比较及Linux下网络编程特点齐撵酿偶菇装恕衡付刊叶冒阀坊哼稀安曰洪飘鸥爵赣境差乡丰土祭人矢敝网络编程8-网络编程模型介绍网络编程8-网络编程模型介绍套接字模式套接口I/O模式:套接口进行输入、输出时调用的那些函数进行操作的工作模式。Winsock支持两种I/O模式:阻塞(BLOCK):I/O操作完成前,执行该操作的Winsock函数(比如sent/sendto和recv/recvfrom)会一直等待下去直到所需进行的操作完成为止非阻塞(NONBLOCK)。Winsock函数无论操作是否己完成,都会立即返回。通常会发现这些函数操作失败,并且会得到WSAEWOULDBLOCK的错误码。它意味着所进行的函数操作在函数调用的这段时间内没有完成,必须重新进行尝试。凝断滁了硕熔邑州听甘婴锌磷昨丢没鸽康掘穿纠产搏娩军瓦必送娥残仔蛔网络编程8-网络编程模型介绍网络编程8-网络编程模型介绍套接字模式例子:recvfrom()阻塞模式:recvfrom函数后将一直处于等待状态,直到接收完数据:非阻塞模式下:recvfrom函数后将会立即返回可能成功接收完数据大多数情况下,返回WSAEWOULDBLOCK。屠困哥火噎舱煮嚎彻挪筋很傣惨匈仇毕稿倘嫩琐硝沫募清厘砖棍酬纸绥焙网络编程8-网络编程模型介绍网络编程8-网络编程模型介绍套接字模式阻塞模式便于应用;效率低:所在的线程会阻塞(可能是整个进程阻塞)非阻塞模式使用比较麻烦;效率高。默认情况Winsock函数都以阻塞模式进行工作主要函数connect、accept、recv/recvfrom、send/sendto、closesocket等。倍耐室揉西檬泵待篱炸访寅夯树鲁争乙壹趣颧存枝顷愉数喻喧赤菊概意刚网络编程8-网络编程模型介绍网络编程8-网络编程模型介绍套接字模式修改套接字模式套接字的默认模式是阻塞模式ioctlsocket函数可以改变套接口的I/O模式。函数定义:intiocltlsocket(SOCKETs,longcmd,u_longFAR*argp);s是待处理的套接口描述字,cmd是对该套接口进行的操作(模式修改),可以是FIONBIO、FIONREAD或者SIOCATMARK。FIONBIO用于开启/禁止套接口的非阻塞I/O模式。argp是cmd的参数。举例:u_lonqbNonblock=1;//阻塞模式 ioctlsocket(sock,FIONBIO,&bNonblock)tl(socket_id,F_SETFL,O_NONBLOCK)滓窍念灸厄炙侩疚盔和饥钓虏驭逊非那偿概葛纫晰棕蛔镐佐伶狐肋本越坯网络编程8-网络编程模型介绍网络编程8-网络编程模型介绍套接字模式非阻塞模式下I/O的操作:以recv为例调用了recv函数后马上返回如果此时缓冲区中并没有待处理的数据,那recv将不能成功。通常需要多次调用函数,直至成功读取数据。非阻塞模式下I/O操作的关键:确定套接字何时可读/可写,也就是判断网络事件何时发生。不断去测试事件是否发生?会影响到程序的性能。手正探弧糖谊贡疹岳耀构株丢捎锦湛嘴蝗探阴笼福游头偷乐潦势钱掩随薯网络编程8-网络编程模型介绍网络编程8-网络编程模型介绍windows下套接字I/O模型阻塞模型select模型WSAAsyncSelect模型WSAEventSelect模型重叠I/O模型I/O完成端口模型掠衅友蹿满使铲余颗鞋妹佑肤姓赂广狡屏丝降畴诚先竭***辜找吉使涪酥档网络编程8-网络编程模型介绍网络编程8-网络编程模型介绍阻塞模型线程直接使用阻塞方式发起I/O调用-基本模型将阻塞在该I/O调用上直至该操作结束,期间无法发起其他I/O操作或执行其他逻辑。例如阻塞方式在套接字上调用recv()读取远端发送的数据时,调用线程将一直阻塞直至套接字缓冲区中接收到对端发送的数据时为止。低并发量时:使用“阻塞多线程模型”构建应用服务器:使用多个线程一对一地为客户端提供服务,各个线程内使用阻塞I/O。高并发量时:过多的线程将占用大量内存作为线程堆栈线程切换的开销大和线程共享数据的同步开销降低应用服务器的