订阅需要很长时间,用户无法等待网页确认..解决 方案
本文关键字:等待 网页 确认 方案 解决 用户 长时间 | 更新日期: 2023-09-27 18:30:50
在我们的 .NET 3.5 网站上,使用 c# 的用户单击我们的网页提交,他们通过电子邮件地址订阅我们的报告。 不幸的是,此操作大约需要 5 分钟,用户必须坐下来等待确认。 我想做的是更改它,以便当他们单击提交时,他们会收到一个弹出窗口,说当他们的订阅通过时,他们将通过电子邮件通知他们,同时我会将订阅操作排队在服务器上的其他地方,以便它不存在在 Web 代码中。 你能给我一些方法吗?基本的想法是,我想分成两个不同的执行行,一个允许他们仍然浏览我们的网站,另一个将订阅它们。 我正在考虑拆分成一个新线程,但我认为 Web 代码仍然必须等待该线程完成才能执行其他任何操作。 我正在寻找想法,最好是可以在同一台服务器上运行的想法。谢谢!
有很多选项,但基本方法是将站点与提供程序分离。 相反,您将写出一条记录,上面写着"用户 X 正在等待订阅",然后一个单独的进程将读取该记录并执行实际订阅,同时将记录标记为"正在进行"。 该过程完成后,将使用已完成的信息再次更新记录。
您可以使用数据库、消息队列或其他方法来实现此目的。 但从根本上说,您的网站将只负责创建记录并检查其状态 - 与提供商的实际交互将单独处理。
如果你有一些事情需要这么长时间,并且你想完成并确保操作完成,那么你最好的选择就是把它排队。
基本上,当他们提交请求时,将其存储在数据库表中,然后让他们继续前进。 同时,使用另一个进程来监视该表以处理请求。 当他们进来时,只需让第二个过程将请求发送到需要 5 分钟才能完成的部分。
完成后,向他们发送"欢迎使用某某电子邮件列表"消息。 这将作为他们对其有效性的确认。
杰夫·阿特伍德(Jeff Atwood)不久前在这里写了一个相关主题的博客。 由于您使用的是 c#,因此我假设您使用的是 ASP.NET,并且可以利用缓存机制来启动定期工作线程作业。 根据用户的请求,可以将订阅的详细信息保留到某些数据存储中。 在该作业中,可以检查队列以确定需要创建哪些订阅,然后执行它们。
https://blog.stackoverflow.com/2008/07/easy-background-tasks-in-aspnet/