1

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

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

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

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

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

4

1 回答 1

0

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

服务器启动时:

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

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

InvokeCommand(ICommand command, int delayTimeInMilliseconds)

像这样:

InvokeCommand(command, typeToDelayMapping[type]);
于 2012-08-18T15:32:48.537 回答