发送http请求并接收推送数据

时间:2014-02-01 01:54:11

标签: node.js push

我希望我的Node.js代码向另一台服务器发送http请求。使用下面的代码可以正常工作。我的问题是,有问题的服务器应该推送数据,并在请求后立即关闭连接。

例如,如果我使用浏览器打开页面,我会从服务器获取推送数据,浏览器会刷新页面。问题是:如何在我的节点服务器中获取跟随我的http请求的推送请求(来自其他服务器)?我试图使用“ keep-alive <保持连接活着/ em>“,但这不会改变任何事情。

示例代码:

var http = require("http");
var agent = new http.Agent;

var options = {
  hostname: 'server.com',
  port: 80,
  path: '/',
  method: 'GET',
  agent: agent,
  headers: {
      'Connection':'keep-alive'
  }
};

var req = http.request(options, function(res) {
  console.log('STATUS: ' + res.statusCode);
  console.log('HEADERS: ' + JSON.stringify(res.headers));
  res.setEncoding('utf8');
  res.on('data', function (chunk) {
    console.log('BODY: ' + chunk);
  });
});

req.on('error', function(e) {
  console.log('problem with request: ' + e.message);
});

// write data to request body
req.write('data\n');
req.write('data\n');
req.end();

2 个答案:

答案 0 :(得分:4)

在你的问题中你有一些含糊不清的问题,这些问题实际上是在浏览器中实现的。除非您告诉我们实际发生了什么操作,否则我们无法告诉您如何复制浏览器操作。

HTTP是一种请求/响应协议,这意味着如果浏览器没有首先打开到服务器的链接(带有请求),服务器就无法“推送”到浏览器。

对我来说,你想要为你不拥有的网页创建一个自定义客户端,所以你必须构建你的应用程序,使其表现得像一个网页,因为你没有控制为页面提供服务的服务器。这是对的吗?

(顺便说一句,很多网站的服务条款都禁止您尝试开发的使用类型。请确认您是否在申请范围内)

如果是这种情况,那么您需要做的是弄清楚一旦加载页面后浏览器如何连接到服务器。有几种方法可以实现:

1)页面加载定期在计时器上发出新的AJAX请求的javascript。如果这是正在发生的事情,那么你很幸运,你所要做的就是捕获该AJAX请求的结构,然后在你的应用程序中,在同一个计时器上发出一个新的HTTP请求。

2)页面打开一个到服务器的websocket,该套接字接受来自服务器的传入数据。这有点不太直接,但是有很多库(想到socket.io)来建立这种连接。

作为一个单独的问题,对于这两种方法中的任何一种,网站都可以传递凭据以便浏览器传回并成功建立这些连接,如果是这样,您必须能够获取这些凭据并使用它们。 / p>

答案 1 :(得分:2)

来自服务器的数据位于

res.on('data', function (chunk) {

HTTP被认为是发送数据和关闭连接。 如果您正在运行 server.com ,则可以重写您的应用程序以保持连接打开(就像普通套接字一样)。 但正如其他人建议你我认为你可以使用其他技术,如网络套接字或长轮询。