Node.js云上的TCP套接字服务器[Heroku/AppFog]
可以在云上运行Node.js TCP套接字应用程序,更具体地说是在Heroku或AppFog上 它不是一个web应用程序,而是一个通过客户端程序进行访问的服务器。其基本思想是使用云扩展功能和易于使用的平台Node.js云上的TCP套接字服务器[Heroku/AppFog],heroku,cloud,appfog,non-web,Heroku,Cloud,Appfog,Non Web,可以在云上运行Node.js TCP套接字应用程序,更具体地说是在Heroku或AppFog上 它不是一个web应用程序,而是一个通过客户端程序进行访问的服务器。其基本思想是使用云扩展功能和易于使用的平台 我知道这样的应用程序可以像Amazon AWS一样轻松地在IaaS上运行,但我真的很想利用Heroku或AppFog的PaaS功能。我有理由相信这并没有回答眼前的问题:“是否可以运行Node.js TCP套接字导向的应用程序”。所有PaaS公司(包括Nodejitsu)都只支持传入连接的HTT
我知道这样的应用程序可以像Amazon AWS一样轻松地在IaaS上运行,但我真的很想利用Heroku或AppFog的PaaS功能。我有理由相信这并没有回答眼前的问题:“是否可以运行Node.js TCP套接字导向的应用程序”。所有PaaS公司(包括Nodejitsu)都只支持传入连接的HTTP[S]反向代理 通常,对于node.js+任何具有面向套接字连接的PaaS,您都希望使用WebSocket,但是:
我们计划在将来使用自定义端口支持面向前端的TCP负载平衡。请继续收看 AppFog和Heroku为您的应用程序提供了一个可供监听的任意端口,该端口映射自端口80。你不能选择你的港口。如果您需要将连接保持长时间打开,请参阅下面的“我的编辑”。如果您的客户端不需要维护和打开连接,您应该考虑创建一个REST API,它为客户端应用程序发出JSON来消耗。端口80非常适合于此,Node.js和Express是在paas上创建API的绝佳组合 AppFog Heroku 编辑:如indexzero所述,AppFog和Heroku仅支持http[s],并关闭长期保持的连接。只要有活动,AppFog将保持连接打开。这可以通过使用Socket.io或第三方解决方案解决,如
tl;dr-就目前的世界状况而言,这简直是不可能的;您必须购买具有自己的公共IP地址的虚拟机 我发现的所有PaaS提供商在其所有应用程序前面都有一个HTTP路由器。这使他们能够在一个IP地址下容纳数十万个应用程序,极大地提高了可扩展性,因此,他们可以免费提供应用程序托管。因此,在HTTP情况下,
Hostname
头用于唯一标识应用程序
但是,在TCP情况下,必须使用IP地址来标识应用程序。因此,为了使其工作,PaaS提供商将被迫从其IPv4范围中为您分配一个。这将无法扩展,主要原因有两个:IPv4地址空间已完全耗尽,以及“传统”网络的缓慢速度将使虚拟机难以物理移动。(“传统”网络指标准/非SDN网络。)
这两个问题的解决方案是IPv6和SDN,尽管我预计无处不在的SDN会在IPv6出现之前出现——这可以用来解决各种IPv4问题。亚马逊已经在其数据中心使用SDN,尽管还有很长的路要走。同时,只需购买一个具有公共IP地址的虚拟机/linux容器实例,并在那里运行TCP服务器。下面是#2的一个示例。AppFog:我目前有一个带有socket.IO的节点应用程序,它返回到
xhr polling
,每秒递增一个计数器并将其发送到客户端;到目前为止,长时间保持的HTTP连接已经启动了115124秒,也就是一天多。更新:Heroku目前支持WebSocket作为“实验室”功能:再次更新:Heroku目前支持WebSocket开箱即用(从实验室中移出)
var port = process.env.VCAP_APP_PORT || 5000;
var port = process.env.PORT || 5000;
// Socket.io server
var io = require('socket.io').listen(port);
...
io.configure(function () {
io.set("transports", ["xhr-polling"]);
io.set("polling duration", 12);
});