可以在云上运行Node.js TCP套接字应用程序,更具体地说,可以在Heroku或AppFog上运行。
它不会是一个web应用程序,而是一个用于访问客户端程序的服务器。其基本思想是使用Cloud的功能-扩展和易于使用的平台。
我知道这样的应用程序可以很容易地在IaaS上运行,比如AmazonAWS,但我真的很想利用Heroku或AppFog的PaaS功能。
我有理由相信这并不能回答眼前的问题:"是否可以运行Node.js TCP面向套接字的应用程序"。所有PaaS公司(包括Nodejitsu)都支持HTTP[S]——仅用于传入连接的反向代理。
通常,对于node.js+任何具有面向套接字连接的PaaS,您都希望使用WebSockets,但是:
-
Heroku不支持WebSockets,只会打开您的连接55秒(请参阅:https://devcenter.heroku.com/articles/http-routing#timeouts)
-
AppFog不支持WebSocket,但我不确定它们是如何处理长期保持的HTTP连接的。
-
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服务器。