Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 一种将铁路连接线移交给延迟作业的方法_Ruby On Rails_Delayed Job - Fatal编程技术网

Ruby on rails 一种将铁路连接线移交给延迟作业的方法

Ruby on rails 一种将铁路连接线移交给延迟作业的方法,ruby-on-rails,delayed-job,Ruby On Rails,Delayed Job,我们有一个现有的API,客户机向我们的服务器请求我们必须从另一个外部服务器获取的信息。当外部服务器占用很长时间(比如10秒)时,它会占用Rails乘客实例整整10秒 是否有某种方法可以将回复的呈现传递给延迟的作业,以便释放Rails实例 注意:理想情况下,我们只需更新API并回复API客户机我们正忙,然后在几秒钟后重试,看看我们是否准备好了。但是,已经有成千上万的客户端,此时更改它们并不实际。通常的处理方法是将作业排队并立即返回,然后轮询或使用一些异步通知框架(如Pusher或Faye)来更新远

我们有一个现有的API,客户机向我们的服务器请求我们必须从另一个外部服务器获取的信息。当外部服务器占用很长时间(比如10秒)时,它会占用Rails乘客实例整整10秒

是否有某种方法可以将回复的呈现传递给延迟的作业,以便释放Rails实例


注意:理想情况下,我们只需更新API并回复API客户机我们正忙,然后在几秒钟后重试,看看我们是否准备好了。但是,已经有成千上万的客户端,此时更改它们并不实际。

通常的处理方法是将作业排队并立即返回,然后轮询或使用一些异步通知框架(如Pusher或Faye)来更新远程客户端。你绝对不能像你描述的那样把连接传给DJ。你可以研究的另一个途径是使用EventMachine来处理它,一个lá。第三种选择是预缓存来自远程web服务的数据,但这是一种非常依赖于您所做的事情的方法(例如,授权不是您可以在那里做的事情)


基本的底线是,您正在处理一点架构问题。如果您必须与远程服务对话并在请求周期中输出结果,那么除了切换到事件较多的后端(如EventMachine或Node.js)之外,您无能为力。

顺便说一句,您不能执行请求的技术原因是您的DJ工作人员在另一个进程中运行(否则它会阻止您的请求,这就是您现在正在处理的),并且您不能跨流程边界共享连接。感谢您的帮助。只是好奇。谁说您“不能跨流程边界共享连接”?Linux?NGINX?乘客?机架?其他?我想我会说这是一个操作系统级的东西。对于大多数操作系统来说,这个过程包含了它可以访问的所有内存。看看共享内存空间可以做些什么可能会很有趣,但我还不够一个操作系统级的极客知道,TBH。