11

可以在Cloud上运行面向 Node.js TCP Socket 的应用程序,更具体地说是在HerokuAppFog上。

它不会是一个 Web 应用程序,而是一个用于访问客户端程序的服务器。基本思想是利用的能力——可扩展性和易于使用的平台。

我知道这样的应用程序可以轻松地在Amazon AWS等 IaaS 上运行,但我真的很想利用HerokuAppFog的 PaaS 功能。

4

3 回答 3

17

我有理由确定这不能回答手头的问题:“是否可以运行面向 Node.js TCP Socket 的应用程序”。所有 PaaS 公司(包括 Nodejitsu)都支持仅 HTTP[S] 的传入连接反向代理。

通常对于 node.js + 任何带有面向套接字的连接的 PaaS,您都希望使用 WebSockets,但是:

  1. Heroku 不支持 WebSockets,并且只会将您的连接保持打开 55 秒(请参阅:https ://devcenter.heroku.com/articles/http-routing#timeouts )

  2. AppFog 不支持 WebSockets,但我不确定它们如何处理长期持有的 HTTP 连接。

  3. Nodejitsu 支持 WebSockets 并将保持您的连接打开直到关闭或重置。我们的 node.js 驱动的反向代理让我们非常便宜。

我们计划在未来通过自定义端口支持前端 TCP 负载平衡。敬请关注!

于 2012-11-20T09:14:09.130 回答
4

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); 
});
于 2012-11-20T21:29:07.230 回答
1

tl;博士 - 以目前的世界状况,这根本不可能;您必须购买具有自己公共 IP 地址的虚拟机。

我发现的所有 PaaS 提供商在其所有应用程序前面都有一个 HTTP 路由器。这使他们能够在一个 IP 地址下容纳数十万个应用程序,极大地提高了可扩展性,因此 - 他们如何免费提供应用程序托管。因此,在 HTTP 的情况下,Hostname标头用于唯一标识应用程序。

但是,在 TCP 情况下,必须使用 IP 地址来标识应用程序。因此,为了使其发挥作用,PaaS 提供商将被迫从其 IPv4 范围内为您分配一个。这将无法扩展主要有两个原因:IPv4 地址空间已完全耗尽,以及“传统”网络的缓慢步伐将使虚拟机物理移动变得困难。(“传统”网络是指标准/非 SDN 网络。)

这两个问题的解决方案是 IPv6 和 SDN,尽管我预见到无处不在的 SDN 会在 IPv6 之前出现——然后它可以用来解决各种 IPv4 问题。尽管还有很长的路要走,但亚马逊已经在他们的数据中心使用了 SDN。同时,只需购买一个具有公共 IP 地址的虚拟机/linux 容器实例并在那里运行您的 TCP 服务器。

于 2014-12-16T09:55:41.473 回答