我想同时监控许多网页/ RSS订阅源并以常规频率轮询它们(它们可能都有不同的更新频率)。我正在考虑为每个想要镜像的源创建一个线程,它将无限循环,然后在处理获取的数据后休眠到下一次更新。
有人会有更好的想法或例子吗?
答案 0 :(得分:0)
使用计时器每1(或5)分钟启动一次。在计时器回调中,循环通过您需要检查的URL,并验证它们是否应该被检查(当您放入注释时,它们将具有不同的同步时间)。您可以准备一个适当的结构来保存网址及其超时,以及从那以后的最后一次。
如果一个url已经确定要同步(已经过了时间),请启动一个异步HttpWebRequest来获取它。这样,您将所有接收部分卸载到线程池线程,因此它不会影响主计时器回调线程。
注意 - 如果对响应执行大量处理,您可能希望在HttpWebRequest回调中启动常规线程以进行其他处理,或者实现某种队列,因此您可以尽快释放线程池线程
以下是如何发出异步请求的详细说明:http://www.devnewsgroups.net/group/microsoft.public.dotnet.framework/topic23172.aspx
您也可以谷歌搜索更多示例,但这是一个良好的开端。
答案 1 :(得分:0)
为什么不在一个时钟上同步它,例如让它们在每小时(10,20,30等)上更新10,而不是让你的所有线程在10分钟内随机更新。为什么每页/ Feed需要创建一个帖子?
答案 2 :(得分:0)
使用Timer对象使用BackgroundWorkerThread对象触发进程,以便您可以在后台处理事物。根据您拥有的Feed数量,您可以考虑在较短的时间间隔内进行“交错”更新。每5分钟说一次,工作线程启动,进入要监视的源列表中的下一个源,并检查更新。
我确信你已经从一些提要读者那里看到了,一次更新所有提要并不总是最好的解决方案,因为它可能会使用户界面稍微冻结一点。
答案 3 :(得分:0)
我创建了一个窗口服务来完成你所描述的内容。每隔n分钟,守护程序唤醒,读取一个XML文件,其中包含需要获取的URL,处理所有数据并再次进入睡眠状态n分钟。我有一个用于获取数据的线程,另一个用于监视XML文件以进行更改。 XML文件可以通过Web界面进行更新。
正如yx所指出的那样,没有必要在每页创建一个线程,但是,如果你有很多urls到fecth,你可以将你的url分发到100个包(例如),然后为每个包创建一个线程。然后,您必须等待最后一个线程完成,然后再将守护进程发送到休眠状态。