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

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

我只是无法使用“telnet”和“nc”连接到它(注意这两个工作正常时指向本地主机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 

标准输出(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 

这是因为使用主机头将请求路由到您的应用程序,netcat或telnet都不会发送。 当用这两种方式发出请求时,你可能会从路由器中得到一个504回应。

我认为问题是在您的TCP客户端和cloudFoundry应用程序之间有一个代理或HTTPredirect器。

Dan Highman的回答是,redirect是由HOST的'header'控制的,这是因为redirect器假定你的客户端使用的是HTTP协议,并且有一个'主机'头部logging来允许它找出你的cloudFoundry应用想要谈话。

我想你是问如何获得一个非HTTP TCP连接到应用程序。 我也没有想到。 VCAP_APP_HOST环境variables提供了一个私有IP地址(即在私有10.0.0.0子网中),因此对于从公共Internet访问云主机没有用处。 (这可能对同一个云主机networking提供的应用之间的通信有用。)

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

但是,UDP永远不会在CloudFoundry.com上工作,因为端口没有打开。

请参阅此处的评论主题: 只有HTTP和HTTPS端口可供在Cloud Foundry上使用的应用程序打开

所以看来我回过头来通过HTTP向这个服务器发送数据,摆脱了HTTP握手是写这个TCP服务器的根本原因。