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

node.js中的Memcache正在返回大小不同的对象,node.js,binary,memcached,Node.js,Binary,Memcached,长期读者,第一次海报 我正在OS X 10.7上使用节点v0.6.6。我还没有在任何其他环境中尝试过这种方法。我正在使用此客户端: 当我使用下面的代码时,数据随机包含更多的字节(如console.log()所报告的),这导致了这个图像:(和许多其他JPG都这样做)。favicon看起来还可以,HTML/CSS/javascript都可以 换句话说:如果我请求图像,图像正确返回的时间约为70%;其他30%-数据报告多了几个字节,并且图像在浏览器中出现损坏 client.get(key, funct

长期读者,第一次海报

我正在OS X 10.7上使用节点v0.6.6。我还没有在任何其他环境中尝试过这种方法。我正在使用此客户端:

当我使用下面的代码时,
数据
随机包含更多的字节(如
console.log()
所报告的),这导致了这个图像:(和许多其他JPG都这样做)。favicon看起来还可以,HTML/CSS/javascript都可以

换句话说:如果我请求图像,图像正确返回的时间约为70%;其他30%-
数据
报告多了几个字节,并且图像在浏览器中出现损坏

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不允许更多链接)。

Elbart的node memcache无法正确处理二进制值,原因是Steve Campbell建议:node memcache不允许客户端直接访问缓冲区。通过串接缓冲区,二进制数据被破坏

使用“mc”npm。(npm安装mc)


警告:我是“mc”npm的作者。我编写它是为了通过memcache的文本协议处理二进制值

你能链接到同一张图片的未损坏版本以供参考吗?另外,请尝试升级您的node版本,听起来它可能是node处理缓冲区的一个bug?谢谢您的回复。我更新了节点版本,问题仍然存在。实际测试来源照片:;实际测试损坏照片:我在2个文件上运行了
vbindiff
,下面是损坏开始的地方:。。。它的腐败方式排除了我唯一的想法。可能是memcache中的一个bug。我自己从未使用过它,我可以建议尝试Redis或更新Memcache(如果有新版本)。对不起,我帮不上忙了!我认为你正在使用的库中有一个bug。我查看了代码,虽然我没有发现问题,但我可以说它正在像处理字符串一样处理节点缓冲区,这对于它处理非ascii数据的能力来说不是个好兆头。谢谢。作为memcache问题的临时解决方案,我使用了
var cache={}
作为缓存。我开始用javascript将对象存储在局部变量中。到目前为止,它在存储约250MB数据和4k对象时工作得非常完美。我的问题:这样做有什么错?我不需要访问其他任何地方的对象;而且我不会/不应该通过缓存我需要的东西来影响太多的内存使用。