可以在Cloud上运行面向 Node.js TCP Socket 的应用程序,更具体地说是在Heroku或AppFog上。
它不会是一个 Web 应用程序,而是一个用于访问客户端程序的服务器。基本思想是利用云的能力——可扩展性和易于使用的平台。
我知道这样的应用程序可以轻松地在Amazon AWS等 IaaS 上运行,但我真的很想利用Heroku或AppFog的 PaaS 功能。
我有理由确定这不能回答手头的问题:“是否可以运行面向 Node.js TCP Socket 的应用程序”。所有 PaaS 公司(包括 Nodejitsu)都支持仅 HTTP[S] 的传入连接反向代理。
通常对于 node.js + 任何带有面向套接字的连接的 PaaS,您都希望使用 WebSockets,但是:
Heroku 不支持 WebSockets,并且只会将您的连接保持打开 55 秒(请参阅:https ://devcenter.heroku.com/articles/http-routing#timeouts )
AppFog 不支持 WebSockets,但我不确定它们如何处理长期持有的 HTTP 连接。
Nodejitsu 支持 WebSockets 并将保持您的连接打开直到关闭或重置。我们的 node.js 驱动的反向代理让我们非常便宜。
我们计划在未来通过自定义端口支持前端 TCP 负载平衡。敬请关注!
AppFog 和 Heroku 为您的应用程序提供了一个任意端口来侦听,该端口是从端口 80 映射的端口。您无需选择端口。如果您需要长时间保持连接打开,请参阅下面的我的编辑。如果您的客户端不需要维护和打开连接,您应该考虑创建一个 RESTful API,它会发出 json 供您的客户端应用程序使用。80 端口已经足够了,Node.js 和 Express 是在 paas 上创建 API 的绝佳组合。
应用雾
https://docs.appfog.com/languages/node#node-walkthrough
var port = process.env.VCAP_APP_PORT || 5000;
Heroku
https://devcenter.heroku.com/articles/nodejs
var port = process.env.PORT || 5000;
编辑:如 indexzero 所述,AppFog 和 Heroku 仅支持 http[s] 并关闭长期保持的连接。只要有活动,AppFog 就会保持连接打开。这可以通过使用 Socket.io 或Pusher等第三方解决方案来解决
// Socket.io server
var io = require('socket.io').listen(port);
...
io.configure(function () {
io.set("transports", ["xhr-polling"]);
io.set("polling duration", 12);
});
tl;博士 - 以目前的世界状况,这根本不可能;您必须购买具有自己公共 IP 地址的虚拟机。
我发现的所有 PaaS 提供商在其所有应用程序前面都有一个 HTTP 路由器。这使他们能够在一个 IP 地址下容纳数十万个应用程序,极大地提高了可扩展性,因此 - 他们如何免费提供应用程序托管。因此,在 HTTP 的情况下,Hostname
标头用于唯一标识应用程序。
但是,在 TCP 情况下,必须使用 IP 地址来标识应用程序。因此,为了使其发挥作用,PaaS 提供商将被迫从其 IPv4 范围内为您分配一个。这将无法扩展主要有两个原因:IPv4 地址空间已完全耗尽,以及“传统”网络的缓慢步伐将使虚拟机物理移动变得困难。(“传统”网络是指标准/非 SDN 网络。)
这两个问题的解决方案是 IPv6 和 SDN,尽管我预见到无处不在的 SDN 会在 IPv6 之前出现——然后它可以用来解决各种 IPv4 问题。尽管还有很长的路要走,但亚马逊已经在他们的数据中心使用了 SDN。同时,只需购买一个具有公共 IP 地址的虚拟机/linux 容器实例并在那里运行您的 TCP 服务器。