⑷、当程序拥有时钟后开始计时,时钟在传递过程中不计时,最后时钟会在某个计算机处到时,收到时钟或时钟到时都应给出提示并通知其他计算机。
⑸、程序具有界面,通过界面可了解参与者的信息和当前分布处理状态。
1.3 相关技术路线
该简易分布式程序的开发,运用各个模块的相关协议,比如,询问-回答协议,握手协议,游戏协同协议等作为程序协议,完成程序里所有的“收—发”各种程序包的过程,连接起来达成该分布式的协同并发作业。合理利用分布式的并发特性,完成各个计算机的对等运行,共同完成一个简易游戏的全部过程。
2 毕业课题详细设计
2.1 基本框架
该毕设软件开发语言选取python,代码分为3个模块:receive(接收模块)、transfer(发送模块)、utils(每个阶段的协议和运行模块),设计过程分为5个阶段:检测阶段、游戏准备阶段、游戏等待开始阶段、游戏开始阶段、游戏阶段。
2.2 整体详细设计
(1)、检测阶段:计算机设置为3台(暂定),每台计算机都有属于自己的IP地址,每台计算机相互独立。每当一台电脑只要上线就会向另外的计算机广播一个“hello”的包,并进入等待状态,等待其他计算机的响应,每当其他计算机收到“hello”的包,就会进行响应,返回一个“ACK”的回答包。当计算机接收到“ACK”的包,就会进行确认,确定是哪台计算机的响应,并建立“wait_list”。
当每台上线的计算机都发送并且接受完毕,都有了自己的“wait_list”时候,检测阶段就完毕了,并进入游戏准备阶段。
(2)、游戏准备阶段:每台计算机都进入准备游戏阶段,这时,设计了一个三次握手的过程:每台计算机向自己的“wait_list”表里的每一个其他计算机组播一个“请求开始游戏的包—req_start”,其他计算机接受到这个请求包之后,都会向包的发起者返回一个“确认可以开始游戏的包—req_start_ack1”,以确认自己已经收到请求包,并同意开始游戏,并且同时询问发起者,发起者是否也同意开始游戏,当发起者收到其他计算机的确认包“req_start_ack1”后,为了向其他计算机建立游戏连接,并确认自己收到该“ack1”包,并同时转达自己也可以开始游戏的意图,会向其他计算机返回一个“req_start_ack2”(没有给自己返回“ack1”的计算机,意着,对方放弃游戏,不向其发送此包,)。
由于考虑到网络延迟的情况,有的计算机必然先传包,有的计算机后传包。这时,当每台计算机在发送询问包“req_start”之前,如果已经收到其他计算机的询问包,就不再向该发起者发送询问包,直接与其进行第二次握手,直到建立游戏连接。
每台已经通过“三次握手”建立连接的计算机,此时进入游戏等待开始阶段。
(3)游戏等待阶段:
a、倒计时阶段。每台进入游戏等待阶段的计算机,为了等待其他计算机的接入,先进行倒计时(设置为5秒),每1秒减去一个数值计时,并且显示出每一次当前计时。倒计时期间,如果有后续的计算机完成了“wait_list”,并且成功与进入倒计时阶段的计算机建立连接,许可该计算机加入等待游戏行列。倒计时结束之后,就不再接受新计算机的连接和接入请求。直接开始投票选出MASTER的阶段。 简易分布式程序的开发(3):http://www.751com.cn/jisuanji/lunwen_20514.html