【问题标题】:Starting socket server in ruby on rails on cloud environments (heroku)在云环境(heroku)上的 ruby​​ on rails 中启动套接字服务器
【发布时间】:2010-05-05 02:09:48
【问题描述】:

我正在使用heroku,我可以很好地推送一个Ruby on Rails应用程序,我正在尝试将其转换为Socket服务器,基本上我需要绑定到一个开放端口,在这种情况下,我知道Heroku 只做 80 22 和 443。

是否可以在这些环境中绑定到端口 80?

另外,我将如何设置此套接字服务器的入口点,我所知道的是,当脚本/服务器启动应用程序时。

我必须把函数调用放在那里吗?如何在 heroku 拥有的任何 web 服务器之上启动套接字服务器而不是 rails 应用程序。

【问题讨论】:

    标签: ruby-on-rails heroku


    【解决方案1】:

    目前无法将非 HTTP 流量路由到您的应用。 Heroku 在后台将 Ruby Web 服务器绑定到各种端口和主机,然后根据 HTTP 标头中的主机将流量路由到这些进程。持续时间超过 30 秒的请求被假定为挂起,并被终止。

    从设计的角度来看,长时间运行的查询会带来严重的性能问题。使用单个测功机,任何持续 30 秒(甚至 2 秒)的请求都会阻止任何其他用户在整个持续时间内访问您的站点。相反,更高效的设计是在基本状态下快速提供页面,并使用工作线程在后台处理内容,同时通过 javascript 提取结果。这可以简单地使用现代 Web 开发工具来完成。

    如果您有一个不需要通过套接字与之通信的长时间运行的进程,您可以简单地使用工作线程。我建议使用像 MongoDB 这样的工具来存储计算结果,并推荐像 Delayed::Job 这样的库来进行排队。

    说了这么多,肯定有一些合理的用例需要更长的运行进程和非 HTTP 流量,但目前 Heroku 不支持它们。

    【讨论】:

      【解决方案2】:

      我认为这在 Heroku 上是不可能的。它们不支持这种架构,并且您对可以在环境中运行的各种事物的控制有限。

      可能值得一看刚刚宣布的 Node.js 支持...目前处于 Beta 版,但可能会给你一些工作。

      【讨论】:

        猜你喜欢
        • 2017-09-02
        • 2017-01-23
        • 1970-01-01
        • 1970-01-01
        • 2015-10-21
        • 1970-01-01
        • 2017-04-11
        • 1970-01-01
        • 2013-04-28
        相关资源
        最近更新 更多