在我们的网站上,我们的版主可能会审阅用户发布的内容。这也适用于视频,但视频需要先转换。这可以在夜间自动发生(通过Windows服务),也可以在主持人手动启动时立即发生。在服务器上运行多个操作
现在,这最后一部分是我的问题来自何处。起初我以为我只是写一个单独的服务来处理转换。无论何时主持人开始转换,数据库中的记录都会更新以将其标记为单次转换。然后服务将处理剩下的事情。当它只是一个文件时,这一切都很好。
但想象一下这种情况,主持人#1启动服务。该服务运行并启动文件转换。在该过程中,主持人#2开始转换不同的文件。它会尝试启动服务,但因为它已经启动而失败。该文件将被标记为单独转换,但不会转换,因为它无法启动服务。
现在我正在寻找新的想法来解决这个问题。
- 是否可以运行一个服务的多个实例?
- 我可以使服务更具动态性吗?例如,如果版主#2开始转换,它将启动服务,但是如果服务已经启动,是否可以将文件添加到列表中? (在服务开始时,我创建一个列表,从数据库中读取每个文件,寻找单个转换标志)
- 我知道我一直在想服务,是否有另一种方式来处理服务器上的操作可以处理版主的多个请求?
我意识到它可能听起来有点模糊,所以如果你有任何问题请问。也许我应该提供一些额外的信息,目前我是一名在实习中工作的学生,我的发起人并不真的想要一个文件几乎立即转换。他们希望在晚上进行转换,除非主持人手动为单个文件启动转换。此外,网站和文件系统位于同一台服务器上(数据库位于单独的服务器上)。基本上,这些工作将在网站运行的同一台服务器上完成(它目前不能分开)。他们担心服务器的性能。
如有任何意见,将不胜感激! 各种问候, 弗洛里斯
我会感到惊讶,如果asp.net不具备某种支持工作队列。你创建一个固定数量的工作线程(可能是1个),完成一个工作单元,然后继续检查新工作,直到出现问题。 – bwawok 2011-05-25 17:16:13
我不是100%确定您的特定要求,但您是否考虑过多线程和线程池? – 2011-05-25 17:22:19
如果服务始终在运行,并且只查看由请求时间戳(简单队列)排序的表,该怎么办?因此,它会定期查询这个队列表并按顺序处理这些项目 - 它甚至可以将这些工作发送给多个线程。我错过了什么吗? – 2011-05-25 17:22:40