Ruby on rails SSE/long轮询连接是否会占用Heroku上的Unicorn进程?
我们在Unicorn/Heroku上运行了一个Rails应用程序,Unicorn配置为处理3个并发工作进程 我们还设置了延迟作业,以异步处理由客户端请求触发的一些长时间运行的文件处理任务 我们希望在任务完成时更新客户端。我们可以通过传统的轮询来实现这一点,但是我们正在研究使用新的Heroku插件,以提高响应能力并减少不必要的HTTP轮询请求的开销Ruby on rails SSE/long轮询连接是否会占用Heroku上的Unicorn进程?,ruby-on-rails,heroku,long-polling,server-sent-events,Ruby On Rails,Heroku,Long Polling,Server Sent Events,我们在Unicorn/Heroku上运行了一个Rails应用程序,Unicorn配置为处理3个并发工作进程 我们还设置了延迟作业,以异步处理由客户端请求触发的一些长时间运行的文件处理任务 我们希望在任务完成时更新客户端。我们可以通过传统的轮询来实现这一点,但是我们正在研究使用新的Heroku插件,以提高响应能力并减少不必要的HTTP轮询请求的开销 EventSource HQ混合使用SSE和长轮询来确保跨浏览器兼容性。我想弄清楚的是,EventSource HQ打开的连接是否在连接的生命周期内绑
EventSource HQ混合使用SSE和长轮询来确保跨浏览器兼容性。我想弄清楚的是,EventSource HQ打开的连接是否在连接的生命周期内绑定了一个Unicorn工作进程?换句话说,如果我有3个通过EventSource HQ连接处理的并发长时间运行的任务,我的web dyno是否无法接收新请求?如果使用类似EventSource的东西,则不会为每个连接的客户端阻止Unicorn进程。这是因为它使用的是发布/订阅模型。客户机订阅EventSource套接字(您从服务器创建并将套接字id传递给客户机),服务器在发生事件(如完成作业)时向其发布该套接字
现在,如果您想实现自己的发布/订阅API,那么使用node.js或非阻塞框架(如计划使用ActionController:Live?服务器发送的事件(Eventsource)API分层在HTTP上)也相当容易。HTTP也有空闲超时。我相信您正在计划使用Action Controller:Live,然后您可以在完成调用后关闭流。然而,这可能会扼杀一次完成所有请求的机会,因此需要诸如Redis或pgsqlnnotify之类的东西。