Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js云上的TCP套接字服务器[Heroku/AppFog]_Heroku_Cloud_Appfog_Non Web - Fatal编程技术网

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

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

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

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


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

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

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

  • Heroku不支持WebSocket,只会将您的连接保持55秒(请参阅:)

  • AppFog不支持WebSocket,但我不确定它们如何处理长期持有的HTTP连接

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


  • 我们计划在将来使用自定义端口支持面向前端的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); 
    });