0

我正在就分配给我的一个项目寻求建议,并希望了解它是如何“专业地”完成的,或者任何可以引导我走向正确方向的建议。

我有一个服务器部件,它接受来自客户端的命令并将字节流推送到串行端口。尽管多个客户端可以向该服务器发送命令,但我们的硬件一次只能处理一个命令。我的问题是在软件端排队。

我已经实现了一个Queue<T>帮助类,它也将数据插入到一个 DataSet 中,其中包含:请求的客户端编号、消息数据(要写入串行端口的字节数组)和消息类型(命令描述)。它还将列出 DataGrid(在窗体上)中的队列命令。可能不是要走的路,但这是我唯一能想到的保留请求客户端和数据并在视觉上显示队列的方法。

我在哪里处理队列的处理?我考虑在自定义事件上处理它,如果 DataGrid 列表发生更改(添加/删除项目),则获取 DataSet 中的第一行数据并将其发送到串行端口。

非常感谢任何意见或建议。

谢谢。

编辑:我忘了补充一点,它也需要来自 SerialPort 的响应,以便从队列中删除当前执行的命令。

4

3 回答 3

0

我会使用数据库表来存储命令队列。Web 应用程序会将记录添加到队列并显示队列,然后一个单独的进程(例如 Windows 服务或控制台应用程序)将从数据库请求下一个命令并将其发送到串行端口。

于 2011-03-22T18:40:38.577 回答
0

如果它是一个高交易量的 Web 应用程序,您可能需要查看队列系统,例如MSMQService Broker QueueRabbitMQ。窗口服务然后可以拿起排队的项目并将其发送到串行端口。

于 2011-03-22T20:07:58.067 回答
0

Client requests can come in at any time, they'll probably be handled by some proxy class (WCF?) on its own thread/task. Then that thread/ task needs to coordinate with the task that's 'inside' the model actually processing the requests.

A good class to do this with is the BlockingCollection.

The server-thread will block until there's something in the collection to work on. It can then take it from the collection in a thread safe manner and process it. Doing it this way ensures that the requests can be accepted when they arrive, but they are processed on at a time.

The overall pattern to think of here is producer-consumer.

GJ

于 2011-03-22T18:45:18.027 回答