node.js中的Memcache返回不同​​大小的对象

时间:2012-03-28 05:28:34

标签: node.js binary memcached

长期读者,第一次发布海报。

我在OS X 10.7上使用节点v0.6.6。我还没有在任何其他环境中尝试过这个。我正在使用此客户端:https://github.com/elbart/node-memcache

当我使用以下代码时,data随机包含更多字节(由console.log()报告),这会导致此图像:http://imgur.com/NuaK4(以及许多其他JPG执行此操作)。 favicon似乎没问题,HTML / CSS / javascript都可以正常工作。

换句话说:如果我要求图像,大约70%的时间图像被正确返回;其他30% - data报告更多字节,图像在浏览器中显示为损坏。

client.get(key, function(err, data) {
    if (err) throw err;
    if (data) {
        res.writeHead(200, {'Content-Type': type, 'Content-Length': data.length});
        console.log('Sending with length: ' + data.length);
        res.end(data, 'binary');
    }
});

我一直在搞乱这几个小时,老实说我很难过。我希望有人能以我的方式向我展示错误。我试着搜索是否有办法用memcache正确存储二进制数据,但没有相关信息。

额外信息:它发生在各种JPG图像上;文件大小中的所有图像大约为100-300KB或更少。例如,一个图像报告了以下大小:286442,286443,286441。如果我直接从磁盘读取数据并将其与节点一起提供,则不会出现此问题。

提前致谢。

修改我更新了我的节点版本并且问题仍然存在。实际测试源照片和损坏的照片可以在我的评论中找到(stackoverflow不允许更多链接)。

1 个答案:

答案 0 :(得分:2)

由于Steve Campbell建议的原因,Elbart的node-memcache不能正确处理二进制值:node-memcache不会让客户端直接访问缓冲区。通过对缓冲区进行字符串化,二进制数据已损坏。

使用'mc'npm。 (npm install mc)

警告:我是'mc'npm的作者。我专门写它来处理memcache的文本协议上的二进制值。