【问题标题】:Two node.js servers?两个 node.js 服务器?
【发布时间】:2012-09-19 08:46:24
【问题描述】:

我想在不同的端口上运行两个 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 页面。但是我的代码不起作用。为什么?

【问题讨论】:

  • 错误是什么?如果您远程登录服务器,您将获得连接? AppFog 是否允许连接到这些端口?如果(是,是)那么你必须发布你的安卓代码。
  • 好吧,我认为问题不在我的 Android 应用程序中,它只有一个按钮,单击它会创建一个 http 客户端,该客户端在端口上打开与服务器站点 test.rs.af.cm 的连接8888. 在 AppFog 站点有停止/启动/重新启动服务器的工具,如果我的服务器停止了,它就不会启动.. 提示“正在启动”在屏幕上并且不会消失。如果我在端口 8080 上使用浏览器连接到我的服务器,它会显示“AppFog 404 Not Found”,telnet 会在端口 8888 上显示“..无法打开连接。连接丢失...”,Titanium 会显示“发送错误目标服务器失败”回应'
  • 好的,所以 AppFog 不允许来自这些端口的传入连接
  • 我给 AppFog 支持团队写了一封邮件,我也会发布他们的答案。我在这里问是因为我认为这里的人可能有类似的问题...

标签: javascript android node.js httpserver appfog


【解决方案1】:

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

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

    嗨!

    不幸的是,AppFog 仅支持 HTTP 流量,因此 websockets 和 UDP 流量将无法工作。不过,Websocket 支持已在我们的路线图中,请继续关注!

    乔 AppFog 支持

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 我想在 android 上创建一个应用程序,该应用程序将从服务器(node.js)端获取信息,并将连接到数据库。但是数据库中的信息可以在网站上更改,所以我的网站不需要与8888端口的服务器发送/接收信息,我的应用程序不需要与8080端口的服务器通信。
      • 您的评论不是特别清楚:在什么情况下您的 Android 客户端代码需要联系(您的一个)服务器,当它得到响应时应该做什么?
      • 假设我正在制作某种图像库并描述存储在“数据库”中的服务器上的图像,我的 android 应用程序按组向我显示所有图像,所以.. 它需要向服务器发送请求并获取这些图像和描述。或者它可以将图像存储在设备的本地存储中并从那里获取所有信息。我的另一个客户端是 HTML 网站,它允许我在我的“数据库”中上传新图像并向它们添加信息。
      • 好的,你有三种类型的客户端/服务器交互: 1)客户端向服务器请求图像列表;服务器发送列出它们的文档。 2)客户端在收到来自(1)的响应后,向服务器(可能多次)请求图像。 3)客户端捕获图像,从用户那里获取注释,并将图像+注释发送到服务器永久存储。仔细考虑这些要求,想出一些关于您的应用如何处理它们的想法,如果遇到问题,请返回这里。
      • 问题出在 AppFog 主机端。谢谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-08
      • 1970-01-01
      • 2013-01-02
      • 1970-01-01
      • 2018-12-15
      • 2014-04-12
      • 1970-01-01
      相关资源
      最近更新 更多