2012-03-28 69 views
2

長期閱讀器,第一次海報。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'); 
    } 
}); 

我一直在搞亂這幾個小時,我可以誠實地說,我很爲難。我希望有人能以我的方式向我展示錯誤。我試圖搜索是否有一種方法來正確存儲二進制數據與memcache,但沒有相關的信息。

額外信息:它發生在各種JPG圖像;所有圖像的文件大小都在100-300KB或更少。例如,一個圖像報告了以下大小:286442,286443,286441.如果我直接從磁盤讀取數據並將其與節點一起提供,則不會發生此問題。

在此先感謝。

編輯我更新了我的節點版本和問題仍然存在。實際測試源照片和損壞的照片可以在我的評論下面找到(stackoverflow不允許更多的鏈接)。

+0

你能鏈接到相同的圖片的參考?另外,嘗試升級你的節點版本,聽起來像它可能是節點如何處理緩衝區的錯誤? – nak 2012-03-28 05:50:47

+0

感謝您的回覆。我更新了我的節點版本並且問題持續存在。實際測試來源照片:http://imgur.com/XUTf2;實際測試的腐敗照片:http://imgur.com/NuaK4 – joneszach 2012-03-28 06:09:08

+0

我在2個文件上運行了'vbindiff',這裏是腐敗開始的地方:http://i.imgur.com/gqTKW.png ...和方式它的腐敗排除了我唯一的想法。可能是memcache中的一個錯誤。我從來沒有使用它,我可以建議嘗試Redis或更新您的Memcache,如果有新版本。抱歉,我無法提供更多幫助! – nak 2012-03-28 06:23:22

回答

2

由於Steve Campbell的原因,Elbart的node-memcache沒有正確處理二進制值:node-memcache沒有給客戶端直接訪問緩衝區。通過將緩衝區串化,二進制數據已損壞。

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

警告:我是'mc'npm的作者。我專門寫了它來處理memcache的文本協議上的二進制值。

+0

謝謝。作爲我的memcache問題的臨時解決方案,我使用了'var cache = {}'作爲緩存。我開始將對象存儲在JavaScript中的局部變量中。當存儲〜250MB數據和4k對象時,它工作得很完美。我的問題:這樣做有什麼問題?我不需要訪問任何地方的對象;我不會/不應該通過緩存我需要的內存來使用太多內存。 – joneszach 2012-04-20 23:01:18

相關問題