Node.js Nodejs中的response.write失败

Node.js Nodejs中的response.write失败,node.js,caching,buffer,Node.js,Caching,Buffer,我试图创建一个代理服务器,从www.xxx.com获取一个页面,例如,缓存响应,然后将其发送到请求浏览器 为此,我在服务器上创建了一个HTTP客户端,它从xxx.com请求页面。响应以块(缓冲区)的形式返回。然后,由于块的数量根据网页的不同而不同,我将块放在一个缓冲区数组中。然后我发送数组的元素 我的问题是并非所有数据块都成功发送。在发送数据之前,是否有其他方法可以缓存数据?(我知道我可以直接发送数据,但我需要发送缓存,因为我想将其发送到多个浏览器) 要保存我使用的块,请执行以下操作: func

我试图创建一个代理服务器,从
www.xxx.com
获取一个页面,例如,缓存响应,然后将其发送到请求浏览器

为此,我在服务器上创建了一个HTTP客户端,它从
xxx.com
请求页面。响应以块(缓冲区)的形式返回。然后,由于块的数量根据网页的不同而不同,我将块放在一个缓冲区数组中。然后我发送数组的元素

我的问题是并非所有数据块都成功发送。在发送数据之前,是否有其他方法可以缓存数据?(我知道我可以直接发送数据,但我需要发送缓存,因为我想将其发送到多个浏览器)

要保存我使用的块,请执行以下操作:

function getURL(u) {
     u = url.parse(u);
     var client = http.createClient(u.port || 80, u.hostname);
     var request = client.request('GET', '/', {
                            'Host': u.hostname,
                         });
     var cache ={ };
     cache.data = [];

     request.end();
     request.on('response', function(response) {
          cache.statusCode = response.statusCode;
          cache.headers = response.headers;

          response.on('data', function(chunk) {
               cache.data.push(chunk);
     }
}
要发送缓存,我使用:

function sendCache(response, cache) {
    var writeSuccess = [];
    response.writeHead(cache.statusCose, cache.headers);
    for (var i in cache.data) {
        // don't encode the data, leave it as it is
        writeSuccess[i] = response.write(cache.data[i], "binary");
        console.log("chunk " + i + " is of length " 
            + cache.data[i].length + ". Response success: " + writeSuccess[i]);
    }
}
在这里,我记录
响应的返回值。写入
检查它是否成功。在node.js API中,没有解释此函数是否返回某些内容,但我只是尝试了一下

我注意到,response.write对于缓存的其他块有时为true,然后为false,而如果我不缓存直接发送响应,则所有块的response.write都为true


如果有人注意到我正在做的事情出错,或者确实知道缓存数据的更好方法(最好是二进制的,以便缓存所有非ASCII字符)。

如果您尝试在node.js中代理请求,您应该尝试使用,这将为您节省大量时间和麻烦

如果您试图在node.js中代理请求,您应该尝试使用,这将为您节省大量时间和麻烦

在Node.js(v0.4.0)的最新版本中,从缓冲区写入响应的问题得到了解决。所以只要更新到这个版本,我的问题就解决了


但是,您必须知道response.write可能仍然会给出false,但这并不意味着它不会被发送,而是不会直接发送(漏桶概念)。这是我从node.js库中的评论中得出的结论(我希望我是正确的)。

在node.js的最新版本(v0.4.0)中,从缓冲区写入响应的问题得到了解决。所以只要更新到这个版本,我的问题就解决了


但是,您必须知道response.write可能仍然会给出false,但这并不意味着它不会被发送,而是不会直接发送(漏桶概念)。这是我从node.js库中的评论中得出的结论(我希望我是正确的)。

感谢Jim的建议,实际上我关心缓存的事情,因为我想将它发送到多个客户端。所以这不仅仅是代理。谢谢Jim的建议,实际上我很关心缓存的事情,因为我想把它发送给多个客户端。所以它不仅仅是代理。