我希望我的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();
答案 0 :(得分:4)
在你的问题中你有一些含糊不清的问题,这些问题实际上是在浏览器中实现的。除非您告诉我们实际发生了什么操作,否则我们无法告诉您如何复制浏览器操作。
HTTP是一种请求/响应协议,这意味着如果浏览器没有首先打开到服务器的链接(带有请求),服务器就无法“推送”到浏览器。
对我来说,你想要为你不拥有的网页创建一个自定义客户端,所以你必须构建你的应用程序,使其表现得像一个网页,因为你没有控制为页面提供服务的服务器。这是对的吗?
(顺便说一句,很多网站的服务条款都禁止您尝试开发的使用类型。请确认您是否在申请范围内)
如果是这种情况,那么您需要做的是弄清楚一旦加载页面后浏览器如何连接到服务器。有几种方法可以实现:
1)页面加载定期在计时器上发出新的AJAX请求的javascript。如果这是正在发生的事情,那么你很幸运,你所要做的就是捕获该AJAX请求的结构,然后在你的应用程序中,在同一个计时器上发出一个新的HTTP请求。
2)页面打开一个到服务器的websocket,该套接字接受来自服务器的传入数据。这有点不太直接,但是有很多库(想到socket.io)来建立这种连接。
作为一个单独的问题,对于这两种方法中的任何一种,网站都可以传递凭据以便浏览器传回并成功建立这些连接,如果是这样,您必须能够获取这些凭据并使用它们。 / p>
答案 1 :(得分:2)
来自服务器的数据位于块
res.on('data', function (chunk) {
HTTP被认为是发送数据和关闭连接。 如果您正在运行 server.com ,则可以重写您的应用程序以保持连接打开(就像普通套接字一样)。 但正如其他人建议你我认为你可以使用其他技术,如网络套接字或长轮询。