我正在寻找关于我被指派的项目的建议,我正在寻找“专业”的方式,或者任何可以引导我走向正确方向的建议。
我有一个服务器部件接受来自客户端的命令并将字节流推送到串行端口。虽然多个客户端可以向此服务器块发送命令,但我们的硬件一次只能处理一个命令。我的问题是在软件端排队。
我实现了一个Queue<T>
辅助类,它也将数据插入到DataSet中,包含:请求客户端编号,消息数据(写入串口的字节数组)和消息类型(命令描述)。它还将列出DataGrid中的队列命令(在Form上)。可能不是要走的路,但这是我唯一可以想到的就是保留请求客户端和数据并在视觉上显示队列。
我在哪里处理队列的处理?我考虑过在自定义事件上处理它,如果DataGrid列表发生更改(项目已添加/删除),请抓取DataSet中的第一行数据并将其发送到串行端口。
非常感谢任何意见或建议。
感谢。
编辑:我忘了添加它确实需要来自SerialPort的响应,以便从队列中删除当前执行的命令。
答案 0 :(得分:0)
我会使用数据库表来存储命令队列。 Web应用程序会将记录添加到队列并显示队列,然后单独的进程(例如Windows服务或控制台应用程序)将从数据库请求下一个命令并将其发送到串行端口。
答案 1 :(得分:0)
客户端请求可以随时进入,它们可能由某个代理类(WCF?)在其自己的线程/任务上处理。然后该线程/任务需要与模型实际处理请求的“内部”任务协调。
这是一个很好的课程,是BlockingCollection。
服务器线程将阻塞,直到集合中有东西可以处理。然后它可以以线程安全的方式从集合中获取它并处理它。这样做可以确保请求在到达时可以被接受,但是一次处理它们。
这里要考虑的整体模式是生产者 - 消费者。
GJ
答案 2 :(得分:0)
如果它是高交易网络应用程序,您可能需要查看排队系统,例如MSMQ,Service Broker Queue或RabbitMQ。然后,窗口服务可以获取排队的项目并将其发送到串行端口。