长期读者,第一次发帖。
我在 OS X 10.7 上使用 Node v0.6.6。我还没有在任何其他环境中尝试过这个。我正在使用这个客户端:https://github.com/elbart/node-memcache
当我使用以下代码时,data
随机包含更多字节(由 console.log()
报告),这会导致此图像:/image/MzOsw.jpg (和许多其他 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。如果我直接从磁盘读取数据并通过 Node 提供服务,则不会出现此问题。
提前致谢。
编辑 我更新了我的 Node 版本,但问题仍然存在。实际测试源照片和损坏的照片可以在我下面的评论中找到(stackoverflow 不允许更多链接)。
最佳答案
Elbart 的 node-memcache 无法正确处理二进制值,原因是 Steve Campbell 提出的:node-memcache 不允许客户端直接访问缓冲区。通过对缓冲区进行字符串化,二进制数据被破坏。
使用“mc”npm。 ( npm 安装 mc )
警告:我是“mc”npm 的作者。我专门编写它来通过内存缓存的文本协议(protocol)处理二进制值。
关于node.js - Node.js 中的 Memcache 返回大小不同的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9901628/