3

我想在不同的端口上运行两个 node.js httpserver:

var http = require('http');        

var dbserver = http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/html'});
    res.write('<html><body><h2 align=center>TEST index.html.</h2></body></html>');
    res.end();
});

dbserver.listen(8888);

var s = http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.write('hello world');
    res.end();
});

s.listen(8080);

我想制作一个 android 应用程序,它将在 AppFog 主机的 8888 端口上连接到我的 Node.js 服务器,向服务器发送消息,并从它接收响应。如果我从浏览器打开我的服务器,我只会得到一个简单的 html 页面。但是我的代码不起作用。为什么?

4

3 回答 3

4

在 AppFog 上,您可以在此处查看运行 Node 应用程序的一些文档:http: //docs.appfog.com/frameworks/node

一个重要的部分是如何确定要绑定到哪个端口。在您的代码示例中,您有 s.listen(8080); 但要指定的端口实际上在 env var 中:

s.listen(process.env.VCAP_APP_PORT || 8080);

AppFog 目前不支持为同一个应用程序打开两个端口,因此您必须将其拆分为两个应用程序,并将第二个应用程序类似地绑定到 env var:

dbserver.listen(process.env.VCAP_APP_PORT || 8888);

AppFog 将在几个月内支持 WebSocket,但今天不可用。

于 2012-09-25T19:26:18.490 回答
2

好吧,好吧,我收到了来自 AppFog 支持的电子邮件答复,听起来像这样:

//------------------------------------------------ ----------------------

乔,9 月 19 日 12:30(太平洋夏令时间):

你好!

不幸的是,AppFog 仅支持 HTTP 流量,因此 websockets 和 UDP 流量将不起作用。不过,Websocket 支持在我们的路线图上,所以请继续关注!

乔 AppFog 支持

//------------------------------------------------ ---------------------

所以问题不在 Node.js 中,也不在我的代码中,而是在 AppFog 中。非常感谢大家的帮助!

于 2012-09-20T04:49:02.827 回答
1

您当然可以在单个节点应用程序的两个不同端口上运行两个不同的服务器,但是如果您希望客户端代码访问它们,您很可能会遇到同源规则问题(例如浏览器通常,从一台服务器加载的运行代码无法向另一台服务器发出 AJAX 请求,因为同一 URL 上的两个不同端口被认为是两个不同的来源)。您的跨服务器连接能力将仅限于请求脚本(包括 JSONP 请求)和 Websocket 连接(但请记住,如果您使用的是 socket.io 并且客户端不支持 Websockets,则套接字的后备传输方法.io 使用不一定能跨域工作。

于 2012-09-19T09:05:31.817 回答