网络软件设计10——有状态设计

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

网络软件设计服务器的有状态与无状态有状态协议设计制作主讲段景山段景山2状态由服务器维护的,关于服务器与客户机正在进行的交互的信息称为状态“信息”不是指服务器和客户机交互的数据,而是关于交互过程本身有状态服务器保存状态信息的服务器程序例:认证服务器需要记录与客户交互的状态--正在认证(等待用户名、等待口令)、已认证等无状态服务器不保存状态信息的服务器程序例:聊天应用有状态与无状态服务器段景山3有状态服务为什么要求设计有状态服务器任务需求可以减少报文开销(利用报文间的相关性)有状态服务器面临的问题增加实现的复杂程度需要复杂的协议控制系统在多个状态下转换时,可能因错误事件而导致:进入非期望状态、死锁、崩溃可以设计有限状态机来指导软件实现段景山4无状态是一个协议问题为什么要设计无状态服务任务需求服务实现简单,可靠性强一个报文的意义不依赖先前的报文--状态的依赖性究竟网络应用软件是有状态的还是无状态的从系统的角度,系统是“无状态”的系统能不断为各次通信服务从功能实现角度,复杂的通信应采用有状态方法设计段景山5有限状态机一种直观、全局、准确的协议描述方法状态转换事件动作缺点时序性不强段景山6有限状态机的基本结构状态:实体有有限个状态每一时刻,实体只处于其中一个状态事件:事件引起实体产生动作,如收到PDU、定时器到时等事件按发生的顺序排在事件队列中,等待处理事件可能有附加条件动作:处理队列中的一个事件,转移到下一状态不同状态下,对同一事件可能有不同的处理方法最简动作:忽略事件,保持状态(图中可省略不画)FSM事件状态1状态2事件e1/动作a1事件e2/动作a2事件e3/动作a3段景山7例以停等协议为例,讲解利用有限状态机实现有状态设计发送方发送完一个数据包后,需得到接收方的确认才能发送下一个数据包若接收方超时没有确认,发送方将重传段景山8停等协议的状态机(1)状态机(Ns,Nr)发送接收递交上层DU协议实体PDU、ACKTo:对等实体PDU、ACKFrom:对等实体状态机的位置段景山9停等协议(2)状态的确定0ACK1ACK发送方接收方准备发送帧1准备发送帧0等待帧1等待帧0段景山10停等协议状态机准备发送帧0准备发送帧1收到ACK并准备好一个帧发送帧0收到ACK并准备好一帧数据发送帧1超时重发帧0超时重发帧1等待接收帧0等待接收帧1收到帧0发送ACK帧0上交收到帧1发送ACK帧1上交接收方发送方段景山11有限状态机小结状态状态是复合的由多个要素形成如:准备发送帧0状态刚发送了帧1上层有一个待发的SDU收到了对前一帧的应答等待刚发送的帧的应答还没有超时系统的状态是稳定的不触发就不变化制定状态的结果可能不唯一状态1状态2-/-x段景山12有限状态机小结事件转换的输入条件若是别的状态的动作造成转换,则跃迁的状态是不稳定状态,不应出现可以是对等实体的动作状态机一次只处理一个事件如果有必要处理多个事件,应定义为复合事件状态1状态2事件1/动作1事件2(动作1)/动作2,动作2事件1,事件2/动作3事件1/动作1事件2/动作2状态3状态1事件3/动作3段景山13有限状态机小结动作动作一定由事件触发不触发就自发产生动作是不稳定状态某些转换不一定产生动作,动作不一定伴随状态转换触发不一定有动作产生,不一定造成状态转换状态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下一状态等待帧0段景山17fsm程序框架根据状态转移表形成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_ACK3#defineEVENT_TIME4状态定义#defineSTATE_SEND01#defineSTATE_SEND12#defineSTATE_RECV03#defineSTATE_RECV14段景山22停等协议的有限状态机设计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段景山事件处理(例:发送状态)24switch(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://resendthebufsend(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://duplicateframeProgramLog(Dicardframe0,Duplicate);//sendacksendbuf.type=FRAME_ACK;sendbuf.len=3;send(ns,(char*)&sendbuf,HEADSIZE,0);caseEVENT_RECV1:fwrite(recvbuf.data,sizeof(char),recvbuf.len,Fid);//sendackbacksendbuf.type=FRAME_ACK;sendbuf.len=3;send(ns,(char*)&sendbuf,HEADSIZE,0);next_state=STATE_RECV1;break;}returnnext_state;}段景山停等协议的有限状态机设计完善细节起始状态第一个帧的发送是“没有”条件触发的结束状态接收方需要知道还有没有新的数据28段景山案例:某嵌入式终端主控程序设计需求界面控制29段景山30段景山需求功能控制31段景山基于状态机的主控设计主程序架构32段景山事件驱动基本架构33段景山状态设计34序号名称说明界面宏定义1空闲状态系统进入的初始状态,输入动作被取消时的状态;欢迎页面ST_IDLE2设置状态用户按设置键,进入设置状态,具有多个子状态;设置页面ST_SET3编辑状态用户按编辑键,进入编辑状态;编辑页面ST_EDIT4等待回显状态向上位机发送数据后,等待上位机回显信息的状态。等待页面ST_WAIT5回显状态得到上位机数据,进行显示。有多个子状态;回显页面ST_SYSINFO段景山状态转移图35起始等待回显空闲回显设置编辑收到下传数据/显示相应内容编辑键/显示编辑内容设置键/显示设置页面功能键或RFID扫描/上传、显示等待页面设置完成或取消/显示欢迎页面取消编辑/显示欢迎页面编辑键/更新编辑内容编辑键/显示编辑内容功能键或RFID扫描/上传、显示等待页面编辑

1 / 38
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功