网络软件设计10-有状态设计课件_第1页
网络软件设计10-有状态设计课件_第2页
网络软件设计10-有状态设计课件_第3页
网络软件设计10-有状态设计课件_第4页
网络软件设计10-有状态设计课件_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

网络软件设计服务器的有状态与无状态有状态协议设计制作主讲段景山2状态由服务器维护的,关于服务器与客户机正在进行的交互的信息称为状态“信息”不是指服务器和客户机交互的数据,而是关于交互过程本身有状态服务器保存状态信息的服务器程序例:认证服务器需要记录与客户交互的状态--正在认证(等待用户名、等待口令)、已认证等无状态服务器不保存状态信息的服务器程序例:聊天应用有状态与无状态服务器3有状态服务为什么要求设计有状态服务器任务需求可以减少报文开销(利用报文间的相关性)有状态服务器面临的问题增加实现的复杂程度需要复杂的协议控制系统在多个状态下转换时,可能因错误事件而导致:进入非期望状态、死锁、崩溃可以设计有限状态机来指导软件实现4无状态是一个协议问题为什么要设计无状态服务任务需求服务实现简单,可靠性强一个报文的意义不依赖先前的报文--状态的依赖性究竟网络应用软件是有状态的还是无状态的从系统的角度,系统是“无状态”的系统能不断为各次通信服务从功能实现角度,复杂的通信应采用有状态方法设计5有限状态机一种直观、全局、准确的协议描述方法状态转换事件动作缺点时序性不强6有限状态机的基本结构状态:实体有有限个状态每一时刻,实体只处于其中一个状态事件:事件引起实体产生动作,如收到PDU、定时器到时等事件按发生的顺序排在事件队列中,等待处理事件可能有附加条件动作:处理队列中的一个事件,转移到下一状态不同状态下,对同一事件可能有不同的处理方法最简动作:忽略事件,保持状态(图中可省略不画)FSM事件状态1状态2事件e1/动作a1事件e2/动作a2事件e3/动作a37例以停等协议为例,讲解利用有限状态机实现有状态设计发送方发送完一个数据包后,需得到接收方的确认才能发送下一个数据包若接收方超时没有确认,发送方将重传8停等协议的状态机(1)状态机(Ns,Nr)发送接收递交上层DU协议实体PDU、ACKTo:对等实体PDU、ACKFrom:对等实体状态机的位置9停等协议(2)状态的确定0ACK1ACK发送方接收方准备发送帧1准备发送帧0等待帧1等待帧010停等协议状态机准备发送帧0准备发送帧1收到ACK并准备好一个帧发送帧0收到ACK并准备好一帧数据发送帧1超时重发帧0超时重发帧1等待接收帧0等待接收帧1收到帧0发送ACK帧0上交收到帧1发送ACK帧1上交接收方发送方11有限状态机小结状态状态是复合的由多个要素形成如:准备发送帧0状态刚发送了帧1上层有一个待发的SDU收到了对前一帧的应答等待刚发送的帧的应答还没有超时系统的状态是稳定的不触发就不变化制定状态的结果可能不唯一状态1状态2-/-x12有限状态机小结事件转换的输入条件若是别的状态的动作造成转换,则跃迁的状态是不稳定状态,不应出现可以是对等实体的动作状态机一次只处理一个事件如果有必要处理多个事件,应定义为复合事件状态1状态2事件1/动作1事件2(动作1)/动作2,动作2事件1,事件2/动作3事件1/动作1事件2/动作2状态3状态1事件3/动作313有限状态机小结动作动作一定由事件触发不触发就自发产生动作是不稳定状态某些转换不一定产生动作,动作不一定伴随状态转换触发不一定有动作产生,不一定造成状态转换状态1-/动作1事件1/-x状态1事件2/动作2事件3/-14有限状态机的作用(1)指导协议实现根据有限状态机形成状态转移表状态

事件动作命令:Open事件2事件3…事件n关闭处理发送:ConnReq……下一状态连接建立…连接建立处理……下一状态状态n处理下一状态状态转移表15状态转移表停等协议的状态转移表准备发送帧0准备发送帧1发送帧0收到ACK发送帧1收到ACK重发帧0超时重发帧1超时状态

事件动作事件1事件2…事件n状态1处理……下一状态…状态2处理…下一状态状态n处理下一状态收到ACK超时准备发帧0处理发送帧0重发帧1下一状态准备发帧1/准备发帧1处理发送帧1重发帧0下一状态准备发帧0/16状态转移表停等协议的状态转移表等待帧0等待帧1发送ACK收到帧0发送ACK收到帧1状态

事件动作事件1事件2…事件n状态1处理……下一状态…状态2处理…下一状态状态n处理下一状态收到帧0收到帧1等待帧0处理发送ACK/下一状态等待帧1/等待帧1处理发送ACK下一状态等待帧017fsm程序框架根据状态转移表形成fsm程序可能的框架fsm(当前状态,事件){switch(事件){case事件1:case事件2:default:ignore;}returnnext_state;}action1;next_state=xxx;……main(){state=initial;while(1){waiteforaevent;state=fsm(state,event);}}fsm.cif(当前状态==X){}18改进的fsm程序框架main(){state=initial;while(1){waiteforaevent;switch(state){caseX:state=x_fsm(event);caseY:state=y_fsm(event);…}}}x_fsm(事件){switch(事件){case事件1:case事件2:default:ignore;}returnnext_state;}action1;next_state=xxx;……}19有限状态机的设计事件的产生停等协议的事件接收到数据:Information、ACK定时器利用select()接收到数据read事件——进一步判决为Information、ACK等定时selecttimeout超时+计时例:定时器为5秒,timeout可设为5秒,如果select返回值为0则认为超时或者timeout设为1秒,连续五次select返回值为0,则认为超时。20有限状态机的设计main(){state=initial;while(1){

waiteforaevent;switch(state){caseX:state=x_fsm(event);caseY:state=y_fsm(event);…}}}main(){timeout=5;while(1){retval=select(…,timeout);if(retval==0){event=TIMEOUT;}elseif(FD_ISSET(s,read){checkthedatatype;event=datatype;}switch(state){…}}}21停等协议的有限状态机设计事件定义#defineEVENT_RECV01#defineEVENT_RECV12#defineEVENT_ACK 3#defineEVENT_TIME 4状态定义#defineSTATE_SEND0 1#defineSTATE_SEND1 2#defineSTATE_RECV0 3#defineSTATE_RECV1 422停等协议的有限状态机设计PDU设计事件产生retval=select(…,timeout);if(retval==0){event=TIMEOUT;}elseif(FD_ISSET(s,read){

checkthedatatype;event=datatype;}structPDU{ chartype; charsequence_num; charlen; chardata[100];}sendbuf,recvbuf;recv(s,&recvbuf,len,0);if(recvbuf.type==FRAME_ACK){event=EVENT_ACK;}else{if(recvbuf.sequence_num==0){event=EVENT_RECV0;event=EVENT_RECV1;}}停等协议的有限状态机设计停等协议缓冲区设计发送方:单个帧的发送缓冲以备超时重传时使用structPDUsendbuf;接收方:单个帧的接收缓冲structPDUrecvbuf;23事件处理(例:发送状态)24 switch(state){ caseSTATE_SEND0: state=S0_fsm(event); break; caseSTATE_SEND1: state=S1_fsm(event); break;}25intS0_fsm(intevent){ intnext_state; next_state=STATE_SEND0; switch(event){ caseEVENT_ACK: sendbuf.len=fread(sendbuf.data,sizeof(char),sizeof(sendbuf.data),Fid); sendbuf.sequence_num=1; sendbuf.type=FRAME_DATA; send(sock,(char*)&sendbuf,sendbuf.len+HEADSIZE,0); next_state=STATE_SEND1; break; caseEVENT_TIMEOUT: //resendthebuf send(sock,(char*)&sendbuf,sendbuf.len+HEADSIZE,0); break; } returnnext_state;}26停等协议的有限状态机设计事件处理(例,接收状态)

switch(state){ caseSTATE_RECV0: state=R0_fsm(event); break; caseSTATE_RECV1: state=R1_fsm(event); break; }intR0_fsm(intevent){ intnext_state; next_state=STATE_RECV0; switch(event){ caseEVENT_RECV0: //duplicateframe ProgramLog("Dicardframe0","Duplicate"); //sendack sendbuf.type=FRAME_ACK; sendbuf.len=3;

send(ns,(char*)&sendbuf,HEADSIZE,0); caseEVENT_RECV1: fwrite(recvbuf.data,sizeof(char),recvbuf.len,Fid);

//sendackback sendbuf.type=FRAME_ACK; sendbuf.len=3; send(ns,(char*)&sendbuf,HEADSIZE,0); next_state=STATE_RECV1; break; } returnnext_state;}停等协议的有限状态机设计完善细节起始状态第一个帧的发送是“没有”条件触发的结束状态接收方需要知道还有没有新的数据28案例:某嵌入式终端主控程序设计需求界面控制2930需求功能控制31基于状态机的主控设计主程序架构32事件驱动基本架构33状态设计34序号名称说明界面宏定义1空闲状态系统进入的初始状态,输入动作被取消时的状态;欢迎页面ST_IDLE2设置状态用户按设置键,进入设置状态,具有多个子状态;设置页面ST_SET3编辑状态用户按编辑键,进入编辑状态;编辑页面ST_EDIT4等待回显状态向上位机发送数据后,等待上位机回显信息的状态。等待页面ST_WAIT5回显状态得到上位机数据,进行显示。有多个子状态;回显页面ST_SYSINFO状态转移图35状态转移表36事件

动作

状态功能键或RFID扫描上位机数据数字编辑键确认(OK键)取消(返回键)设置键上下键左右键WLAN驱动文字菜单图片有编辑无编辑有编辑无编辑上下左右AP列表空闲组包上传;显示等待回显页面计

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论