新來Node.js的在SO搜索了很多答案,但找不到適合這個問題的解決方案。我使用的是自定義的內存緩存服務器代碼的node.js從memcached的服務中獲取數據(使用PHP存儲),添加下面唯一的相關代碼:EADDRINUSE從node.js的
var net = require("net");
net.createServer(function(socket) {
socket.setEncoding('utf8');
var cmd = {};
var incoming = '';
socket.addListener('receive', function(data) {
incoming += data;
// in the mid of receiving some data, so we can't
// parse it yet.
if(data.substring(data.length - 2) != '\r\n')
return;
data = incoming;
incoming = '';
var parts = data.split(/ /);
if(parts[0].match(/^(add|set|delete|get|gets)$/i)) {
switch(parts[0]) {
case 'add':
var message = JSON.parse(data.split('\r\n')[1]);
self._add.call(socket, parts[1].replace('\r\n', ''), message);
break;
case 'set':
var message = data.split('\r\n')[1];
try {
message = JSON.parse(message);
} catch(e) {}
var subparts = parts[1].replace('\r\n', '').split('/');
self._set.call(socket, subparts.slice(0, 2), subparts.slice(2).join('/'), message);
break;
case 'delete':
self._delete.call(socket, parts[1].replace('\r\n', ''));
break;
case 'get':
self._get.call(socket, parts[1].replace('\r\n', ''));
break;
case 'gets':
var getsparts = parts.slice(1);
getsparts[getsparts.length - 1] =
getsparts[getsparts.length - 1].replace('\r\n', '');
self._gets.call(socket, getsparts);
break;
}
}
});
}).listen(11211, "localhost");
但每當我試圖啓動節點服務器,它說:EADDRINUSE
,因爲這是由於memcached服務已在端口11211
上運行的緣故。如果我將端口更改爲(51242)等其他內容,則錯誤不會顯示,但是沒有數據從memcached中檢索到。
那麼,有沒有使用相同的端口11211
從這個Node.js的內存緩存服務器代碼的任何方式,我可以連接到memcached的服務..? 我是Node.js的新手,所以找不到任何可行的解決方案。那麼,我如何解決這個問題而不使用任何node.js memcached模塊,或者我完全在錯誤的路徑..?作爲一個方面說明我運行的memcached服務和Windows 7的NodeJS請提出
更新
而不是
net.createServer(function(socket) {
我改成下面的測試
this.start = function() {
var socket = net.createConnection(11211, "127.0.0.1");
console.log('Socket created.');
socket.on('data', function(data) {
console.log('RESPONSE: ' + data);
}).on('connect', function() {
socket.write("GET/HTTP/1.0\r\n\r\n");
}).on('end', function() {
console.log('DONE');
});
}
但在控制檯上,它顯示套接字創建,然後拋出錯誤::錯誤連接ECONNREFUSED
感謝您的答覆,將檢查使用的createConnection代替。 – 2013-02-12 04:58:58
似乎拋出新的錯誤「ECONNREFUSED」 .. – 2013-02-12 05:07:13
請更新你上面的代碼,以準確地代表你現在在做什麼。 – TML 2013-02-12 05:08:23