具有可变延迟的Client Server命令设计模式

时间:2012-08-18 06:11:15

标签: oop design-patterns command-pattern

我正在编写一个客户端程序来控制服务器,而服务器又控制着一些大型硬件。服务器需要接收命令来初始化,启动,停止和控制硬件。

从客户端到服务器的连接是通过TCP或UDP套接字。使用SCADA协议(例如Modbus或DNP3)将每个命令封装在适当的消息中。

部分初始化阶段涉及从客户端向服务器发送一系列命令。在某些情况下,命令之间必须有几秒钟的延迟,以防止多个子系统同时被初始化。延迟的值取决于命令的类型。

我认为Command Design Pattern是一个很好的方法。客户端实例化ConcreteCommands,并且Invoker将其放入队列中。我不确定如何合并变量延迟以及是否有更好的模式涉及定时器和队列来处理发送 具有可变延迟的消息。

我正在使用C#,但这可能无关紧要,因为它更像是一个设计模式问题。

1 个答案:

答案 0 :(得分:0)

听起来你需要存储类型的映射以延迟。当您的服务器启动时,您可以缓存这些延迟时间吗?然后调用一个在指定的延迟后处理命令的方法?

服务器启动时:

Dictionary<Type, int> typeToDelayMapping = GetTypeToDelayMapping();

当命令到达服务器时,服务器可以调用:

InvokeCommand(ICommand command, int delayTimeInMilliseconds)

像这样:

InvokeCommand(command, typeToDelayMapping[type]);