我正在使用heroku,我可以推送Ruby on Rails应用程序就好了,我正在尝试将其转换为Socket服务器,基本上我需要绑定到一个开放端口,在这种情况下,我知道Heroku只有80 22和443.
是否可以在这些环境中绑定到端口80?
此外,我如何设置此套接字服务器的入口点,我所知道的是,当脚本/服务器启动应用程序时。
我必须将函数调用放在那里吗?如何在Heroku拥有的任何web服务器之上启动套接字服务器而不是rails应用程序。
答案 0 :(得分:4)
目前无法将非HTTP流量路由到您的应用。 Heroku将Ruby Web服务器绑定到幕后的各种端口和主机,然后根据HTTP标头中的Host将流量路由到这些进程。假设持续时间超过30秒的请求被挂起,并被终止。
从设计角度来看,长时间运行的查询会带来严重的性能问题。使用单个dyno,任何持续30秒(甚至2秒)的请求都会阻止任何其他用户在整个持续时间内访问您的网站。相反,更高效的设计是在基本状态下快速提供页面,并使用工作线程处理后台内容,同时通过javascript拉取结果。这可以使用现代Web开发工具完成。
如果您有一个长时间运行的进程,您不需要通过套接字进行通信,则只需使用工作程序即可。我推荐一个像MongoDB这样的工具来存储计算结果和一个像Delayed :: Job这样的库来排队。
说了这么多,肯定有合理的用例需要更长时间运行的进程和非HTTP流量,但目前Heroku不支持它们。
答案 1 :(得分:1)
我不认为这可以在Heroku上实现。它们不支持这种体系结构,并且您对可以在环境中运行的各种事物的控制有限。
可能值得看看刚刚宣布的Node.js支持...目前处于测试阶段,但可能会给你一些合作。