具有可变时滞的客户端服务器命令设计模式(Client Server Command Design p

2019-09-21 08:19发布

我写一个客户端程序来控制服务器,又控制了一些大的硬件。 服务器需要接受命令初始化,启动,停止和控制硬件。

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

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

我想,该命令设计模式是一个很好的方法来这里跟随。 该客户端实例ConcreteCommands和祈求其放置在队列中。 我不知道如何把可变延迟,以及是否还有更好的模式,涉及一个定时器和一个队列处理与可变延迟发送的消息。

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

Answer 1:

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

当服务器启动:

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

当一个命令到达服务器,该服务器可以调用这个:

InvokeCommand(ICommand command, int delayTimeInMilliseconds)

像这样:

InvokeCommand(command, typeToDelayMapping[type]);


文章来源: Client Server Command Design pattern with variable delays