node.js - 发送http请求并接收推送数据

标签 node.js push

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

例如,如果我使用浏览器打开页面,我会从服务器获取推送数据,并且我的页面会被浏览器刷新。问题是:如何在我的 Node 服务器中获取跟随我的 http 请求的推送请求(来自其他服务器)? 我尝试使用“keep-alive”,但这不会改变任何东西。

示例代码:

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();

最佳答案

在您的问题中,关于更新实际上是如何在技术上在浏览器中完成的问题有些含糊不清。除非您告诉我们实际发生了什么操作,否则我们无法告诉您如何复制浏览器操作。

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

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

(顺便说一句,许多网站的服务条款禁止您尝试开发的使用类型。请确认您的应用程序在范围内)

如果是这种情况,那么您要做的就是弄清楚页面加载后浏览器如何连接到服务器。发生这种情况的方式有多种:

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

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

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

关于node.js - 发送http请求并接收推送数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21493181/

相关文章:

ios - Swift 如何在推送后保留导航栏按钮项目

node.js - Mongoose 、express 和 EJS 的奇怪行为

node.js - NodeJS - 与尝试 ntlm 身份验证的服务器通信,但遇到奇怪的行为

javascript - 如何将小数四舍五入到最接近的 0.5(0.5、1.5、2.5、3.5)

Git:如何从 "no branch"推送到一个新的远程分支?

javascript - 使用 array.push 进行正确编码

javascript - 无法推送到 JS 中的数组

node.js - Express 4.11.1中的Passport.js,它不会写入session.passport

javascript - 迭代 JSON 将结果放入数组

.net - WebOrb.net/替代品