云上的Node.js TCP套接字服务器[Heroku/AppFog]



可以在上运行Node.js TCP套接字应用程序,更具体地说,可以在HerokuAppFog上运行。

它不会是一个web应用程序,而是一个用于访问客户端程序的服务器。其基本思想是使用Cloud的功能-扩展和易于使用的平台。

我知道这样的应用程序可以很容易地在IaaS上运行,比如AmazonAWS,但我真的很想利用HerokuAppFog的PaaS功能。

我有理由相信这并不能回答眼前的问题:"是否可以运行Node.js TCP面向套接字的应用程序"。所有PaaS公司(包括Nodejitsu)都支持HTTP[S]——仅用于传入连接的反向代理。

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

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

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

  3. Nodejitsu支持WebSockets,并将保持您的连接打开,直到关闭或重置。我们的node.js支持的反向代理使这对我们来说非常便宜。

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

AppFog和Heroku为您的应用程序提供了一个可侦听的任意端口,该端口从端口80映射而来。你无法选择你的端口。如果你需要长时间保持连接打开,请参阅下面的编辑。如果你的客户端不需要维护和打开连接,你应该考虑创建一个restful API,它会发出json供你的客户端应用程序使用。端口80就足够了,Node.js和Express为在paas上创建API提供了极好的组合。

AppFog

https://docs.appfog.com/languages/node#node-漫游

var port = process.env.VCAP_APP_PORT || 5000;

Heroku

https://devcenter.heroku.com/articles/nodejs

var port = process.env.PORT || 5000;

EDIT:正如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;dr-就目前的世界状况而言,这简直是不可能的;您必须购买具有自己的公共IP地址的虚拟机。

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

然而,在TCP的情况下,必须使用IP地址来标识应用程序。因此,为了实现这一点,PaaS提供商将被迫从他们的IPv4范围中为您分配一个。这将无法扩展,主要有两个原因:IPv4地址空间已经完全耗尽,而"遗留"网络的缓慢速度将使虚拟机难以物理移动。("遗留"网络是指标准/非SDN网络。)

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

最新更新