Node.js 的新手。在 SO 中搜索了很多答案,但找不到适合此问题的解决方案。我正在使用 node.js 的自定义 memcache 服务器代码从 memcached 服务(使用 php 存储)获取数据,仅在下面添加了相关代码:
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 memcache服务器代码的相同端口连接到memcached服务..?我是 Node.js 的新手,所以想不出任何可能的解决方案。那么,如何在不使用任何 node.js memcached 模块的情况下解决此问题,或者我完全走错了路..?作为旁注,我在 Windows 7 上运行 memcached 服务和 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');
});
}
但在控制台上,它显示 Socket Created,然后抛出 error:: Error connectECONNREFUSED