我正在制作一个 Rails 应用程序。在一个动作中,我需要生成一个长时间运行的进程。这不是问题。我可以使用 spawn gem 或其他方法创建新进程。但是在进程产生一段时间后,用户必须能够向该进程传递额外的数据。
当然,我可以 fork 进程,它会监听一个 UNIX 套接字,在 HTTP 会话中存储套接字地址,并在用户需要将新数据传递给进程时使用 drb 协议与该进程通信。但我认为这不是最佳解决方案,将应用程序部署到主机将是一个问题。
有什么简单的方法可以做到这一点?
我正在制作一个 Rails 应用程序。在一个动作中,我需要生成一个长时间运行的进程。这不是问题。我可以使用 spawn gem 或其他方法创建新进程。但是在进程产生一段时间后,用户必须能够向该进程传递额外的数据。
当然,我可以 fork 进程,它会监听一个 UNIX 套接字,在 HTTP 会话中存储套接字地址,并在用户需要将新数据传递给进程时使用 drb 协议与该进程通信。但我认为这不是最佳解决方案,将应用程序部署到主机将是一个问题。
有什么简单的方法可以做到这一点?
建议上一层。使用delayed_job 为您的作业处理参数的生成和初始设置。
您可以修改delayed_job 的dbms 模型以添加您希望稍后发送到作业的附加信息的字段。
那么您的流程将是:
使用延迟作业提交。存储作业表的 id。如果 stock de;ayed_job 没有为您提供作业 ID,则根据需要修改 delay_job。
将附加数据添加到工作表中的字段
如果您的主要作业需要从分叉作业返回数据,那么您也可以为此设置一个 db 字段。
您应该尝试设计您的应用程序以最小化所需的消息传递量。否则你需要设计一个消息协议。可以完成,但这是您应该尽量避免的工作。
附加数据可以进入数据库,并且该过程在那里检查“新数据”吗?
你不能使用一个线程并通过两个队列与它通信,一个用于线程的输入,一个用于线程的响应?