每个客户端的指令单独响应,但是每条指令在执行完之前只响应一次

.Net技术 码拜 6年前 (2016-06-09) 599次浏览
小弟写了个服务器程序,每当一个客户端(单片机)接入就新建一个线程,并实例化一个client类与客户端进行通讯。客户端会发3条指令,本人把这三条指令封装成了单独的指令处理类,这样每个client实例收到指令时就会new一个指令处理类。但现在本人遇到的问题是,每个指令处理类的处理速度并没有本人想象中那么快,一条指令还没处理完毕,接着单片机又会发来一条同样的指令,这样就造成本人又得new一个新的指令处理类来处理相同的指令,这样就会造成逻辑混乱。本人想实现的功能是,每个指令处理实例在消亡前,client实例不再响应相通的指令。
感觉有点像单例模式,但是用单例的话就是全局只有一个指令处理对象了,不是本人希望的每个通讯只有一个指令处理对象。
下面附上部分代码,望高手们为本人指点一下!
client类:根据不同的指令用工厂创建不同的指令处理对象
每个客户端的指令单独响应,但是每条指令在执行完之前只响应一次
ReTest类:ReTest指令处理类,继承子BaseCommand,实现了ExecuteCommand接口
每个客户端的指令单独响应,但是每条指令在执行完之前只响应一次
BaseCommand类:不同指令处理类的基类,包含一些各条指令都会用到的功能和记录该指令绑定的客户端
每个客户端的指令单独响应,但是每条指令在执行完之前只响应一次
解决方案

35

建一个全局变量保存recvMsg或cmd,响应一条指令时判断能否与这个变量相同,相同就不处理,不相同就处理,变量赋为空

5

建议增加中断机制,当客户端收到某个特定指令的时候中断发送(例如:Cmd_Get)。这样的话就可以安心处理完要处理的事情。待处理完事情以后再发送完成指令(例如:Cmd_Ok)。假如处理异常可以在加入重发指令(例如:Cmd_ReSend)。这样就不会出现你说的当一个指令未完成有来下一个指令了。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明每个客户端的指令单独响应,但是每条指令在执行完之前只响应一次
喜欢 (0)
[1034331897@qq.com]
分享 (0)