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

长期的读者,第一次的海报。

我在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'); } }); 

我已经搞了好几个小时,我可以诚实地说我很难过。 我希望有人能以我的方式向我展示错误。 我试图search是否有一种方法来正确存储与memcache的二进制数据,但没有相关的信息。

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

提前致谢。

编辑我更新了我的节点版本,问题仍然存在。 实际的testing源照片和腐败的照片可以在我的评论下面find(stackoverflow不允许更多的链接)。

由于Steve Campbell的理由,Elbart的node-memcache不能正确处理二进制值:node-memcache不能让客户直接访问缓冲区。 通过将缓冲区string化,二进制数据已损坏。

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

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