首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails:我可以从作业内部重定向吗?

Rails:我可以从作业内部重定向吗?
EN

Stack Overflow用户
提问于 2021-09-16 13:20:22
回答 1查看 70关注 0票数 1

用户向控制器发起POST请求,这会导致更长的动作流,这些动作是网络绑定的,通常需要2-3秒才能完成。在此之后,用户被重定向到一个新页面以接收结果。

据我所知,Rails中同时可能连接的数量与控制器中阻塞的请求数量直接相关。因此,最好将此操作作为作业入队,并在作业完成后从那里执行重定向。

这将使得轻松地支持更多的并发连接成为可能,因为这些作业的处理可以被卸载。

在Rails中实现这一点是可能的吗?或者,如何扩展网络绑定请求以支持多个同时连接?请注意:我不希望客户端轮询,这不适合像RoR这样的现代web框架。

EN

回答 1

Stack Overflow用户

发布于 2021-09-21 04:22:14

轮询的另一种选择是使用ActionCable,在包含繁重请求的客户端加载页面之后,例如结帐表单,您的js将根据用户会话+任务名称自动建立具有特定通道id的action-cable通道,例如: heavy- task :123xyz

现在,当用户提交繁重的任务时,验证后的控制器将委托给一个作业(具有通道id heavy-task:123xyz),因此该控制器将自由地接受另一个请求。过了一段时间,工作完成了,这将使用AcionCable将结果广播到频道heavy-task:123xyz

一旦从通道接收到作业消息,客户端会立即重定向到结果页面。

代码语言:javascript
复制
client1 ---- get/ load page -------> server 
    |   <------------------------200 controller
    |                                   |
establish action-cable <---------------------> Channel
    |                                   |        |
request -- post/ heavy task ------>  controller  | 
                                        |----------enqueue job --> sidekiq---
                                        |        |                          | 
                                        |        |<--------------------job done
                                        |        |
client1 <----------------------------------------- broadcast
    |                                   |        X close Channel
    ------ redirect_to get/other -----------> another-controller
                                        |           |

注意:

在到达表单页面后应尽快建立通道的原因是,作业可能在建立过程完成之前完成(因此,客户端不会在发送作业结果消息后立即收到job message)

  • should close通道,因为通道占用大量资源(内存)

  • 不确定可扩展性如果有这么多通道,性能将会下降,您可以考虑anycablereference
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69209224

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档