无法连接到CloudFoundry上的TCP服务器(localhost node.js工作正常)
cannot connect to TCP server on CloudFoundry (localhost node.js works fine)
我在连接到运行在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
这是因为请求是使用主机头路由到应用程序的,netcat和telnet都不发送。当你向其中任何一个发出请求时,你可能会从路由器收到504。
我认为问题在于TCP客户端和cloudFoundry应用程序之间存在代理或HTTP重定向程序。
Dan Highman的回答是,重定向由HOST"头"控制,这是基于重定向器假设您的客户端正在使用HTTP协议,并有一个"主机"头记录,使其能够确定您要与哪个cloudFoundry应用程序对话。
我想您是在问如何获得与应用程序的非HTTP TCP连接。我也没想明白。VCAP_APP_HOST环境变量提供了一个专用IP地址(即在专用10.0.0.0子网中(,因此这对于从公共互联网到云主机没有用处。(这可能有助于同一云主机网络提供服务的应用程序之间的通信。(
我试图通过使用UDP来解决这个问题,UDP是单向的,可以满足这个服务器的需求,它可以使用仅接收数据的协议来接收数据。
然而,UDP永远不会在CloudFoundry.com上工作,因为端口没有打开。
请参阅此处的评论线程:只有HTTP和HTTPS端口可供应用程序在Cloud Foundry 上使用
因此,我似乎又回到了通过HTTP向该服务器发送数据,毕竟,摆脱HTTP握手是最初编写该TCP服务器的根本原因。
- 在索引.html和应用.js [node.js] 之间共享变量
- JS(node.js)而循环不起作用
- 如何使用 JS (Node.js) 防止 HTTP 查询中允许使用 UTF8 字符串
- Angular JS & Node Webkit Routing
- 当作为脚本运行时.js Node中“this”的上下文是什么
- JS/Node:- 使用 node.io 选择标记
- JavaScript 如何让节点在返回 node.js/Node-RED 之前等待
- 处理快速连续的函数调用 - Javascript / underscore.js / node.js
- 如何在一台服务器中运行不同的.js文件.js NODE JS中的文件
- JS node-mysql bools 表现得很奇怪
- Node.js+Node Webkit+基于Node串行端口的应用程序-这可能吗
- 如何在Express.js/Node.js中检查查询字符串是否有值
- Express.Js, Node.Js, MongoDB Questions
- 在JS/Node中,当多个人编辑相同的记录时,如何避免数据冲突?有图案吗
- 服务器端js(node.js)上的同步
- 将参数从jade发送到js/node
- angular.js+node.js/electron中的Promise;不起作用
- 是否有可能确定我的应用程序的aws实例使用js/node aws-sdk
- Image Magick模块抛出奇怪的错误(Express js Node js)
- 用JS (Node.js)读取文本文件'