1

我是 Web 开发和多线程的新手,我对一些概念有疑问。

在我的 Rails 应用程序中,客户可以通过表单提交“工作”。每次创建作业时,它都会传递给名为“Dispatcher”的模块,并且调度程序模块必须等待 3 分钟才能执行其他任务。

为了做到这一点,我建议只运行 sleep 3 分钟。

我的伙伴说这是个坏主意,因为每次创建工作时它都会冻结应用程序 3 分钟。

我的问题是我不明白这是怎么可能的。每当客户端连接到我们的应用程序(托管在 AWS elastic beanstalk 上)时,我假设 EC2 服务器启动一个新线程来处理客户端请求。每当客户端创建作业时,都会导致运行应用程序的 HIS 线程休眠 3 分钟。这应该不是问题,因为我们希望我们的应用在 3 分钟结束之前什么都不做。

有人可以告诉我我的概念是否正确。我想完全了解从发出请求的客户端到处理它的服务器,再到将 HTML 和 javascript 发送回客户端的工作原理。

4

1 回答 1

2

这与ec2无关。在大多数情况下,EC2 与常规服务器环境没有任何不同。

保持请求开放 3 分钟是不好的。在许多情况下,您有一个前端 Web 服务器将请求传递给 cgi 进程。在这种情况下是红宝石。如果在 30-60 秒内没有响应,Web 服务器通常会关闭连接。您通常可以增加超时时间,但是您可能会遇到打开连接数的限制。

这种情况的最佳解决方案是将延迟消息发送到队列中,该队列将在 3 分钟后处理。

于 2013-05-09T20:02:17.083 回答