无法连接到CloudFoundry上的TCP服务器(localhost node.js工作正常)

时间:2013-03-15 12:30:21

标签: javascript node.js tcp cloudfoundry

我无法连接到在CloudFoundry上运行的TCP服务器示例。在本地node.js安装上运行我的app.js文件时,它运行正常。具体来说,当我使用vmc push运行CloudFoundry时,服务启动并且不会崩溃。有些IP连接到它,断开连接,据我所知,服务一直在运行。

我无法使用“telnet”和“nc”连接到它(请注意,这两种方法在指向localhost node.js服务器时工作正常。

这失败了:

> nc themagicsandbox2.cloudfoundry.com 8124

这有效

> nc localhost 8124
hello from TCP server! (intended reply)

我的代码在此处提交,Cloud Foundry stdout.log在其下方提交。

代码:

myTrace('loaded'); // myTrace prepends timestamp to text and sends to console.log

var tcpServer = require('net').createServer(function(sock) { //'connection' listener
    sock.on('connect', function() {
        myTrace('client ' + sock.remoteAddress + ':' + sock.remotePort +' connected');
        sock.write('hello from TCP server!\r\n');
        sock.pipe(sock);
      });

    sock.on('end', function() {
        myTrace('client disconnected');
      });
  });



tcpServer.listen(8124, process.env.VCAP_APP_HOST || "localhost");

tcpServer.on('listening', function() {
      myTrace('server is listening - bound!');
    });

tcpServer.on('error', function(err) {
     myTrace('server err: ' + err);
     if (err.code == 'EADDRINUSE') {
       myTrace('Address in use, retrying ...');
       setTimeout(function() {
           tcpServer.close(function (err) {
               myTrace('server.close: ' + err);
             });
           tcpServer.listen(SLIDEIN_TCP_PORT, process.env.VCAP_APP_HOST || "localhost");
         }, 1000);
     }
  });

tcpServer.on('close', 
          function() {
            myTrace('server has closed');
             });

stdout.log(CloudFoundry):

Getting file contents... OK

Fri Mar 15 2013 11:59:02 GMT+0000 (UTC) loaded
Fri Mar 15 2013 11:59:02 GMT+0000 (UTC) server is listening - bound!
Fri Mar 15 2013 11:59:03 GMT+0000 (UTC) client 172.30.50.10:31840 connected
Fri Mar 15 2013 11:59:03 GMT+0000 (UTC) client disconnected

stdout(localhost node.js):

Fri Mar 15 2013 12:57:39 GMT+0100 (CET) loaded
Fri Mar 15 2013 12:57:39 GMT+0100 (CET) server is listening - bound!
Fri Mar 15 2013 12:57:53 GMT+0100 (CET) client 127.0.0.1:52260 connected
Fri Mar 15 2013 12:57:59 GMT+0100 (CET) client disconnected
Fri Mar 15 2013 12:58:00 GMT+0100 (CET) client 127.0.0.1:52261 connected
Fri Mar 15 2013 12:58:01 GMT+0100 (CET) client disconnected

3 个答案:

答案 0 :(得分:1)

这是因为使用主机头将请求路由到您的应用程序,netcat或telnet都不会发送。在使用其中任何一个发出请求时,您可能会从路由器返回504。

答案 1 :(得分:0)

我认为问题是您的TCP客户端和cloudFoundry应用程序之间存在代理或HTTP重定向器。

Dan Highman的回答是,重定向是由HOST'标头'控制的,这是因为重定向器假定您的客户端正在使用HTTP协议并且有一个'主机'标头记录,以便它能够找出您想与之交谈的cloudFoundry应用程序。

我想您正在询问如何获得与应用程序的非HTTP TCP连接。我也没想出来。 VCAP_APP_HOST环境var提供私有IP地址(即在私有10.0.0.0子网中),因此对于从公共Internet访问云主机无效。 (对于由同一个云主机网络提供服务的应用程序之间的通信可能很有用。)

答案 2 :(得分:-1)

我试图通过使用单向的UDP来解决这个问题,这可以满足这个服务器的需要,它可以用于接收数据的接收协议。

但是,UDP永远无法在CloudFoundry.com上运行,因为端口未打开。

请参阅此处的评论主题: Only the HTTP and HTTPS ports are open for an app to use on Cloud Foundry

因此,似乎我回到了通过HTTP向这个服务器发送数据,摆脱HTTP握手是首先编写这个TCP服务器的根本原因。