-1

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

4

1 回答 1

2

这是因为 node 应该与 memcached 交互,而不是作为服务器(绑定端口并接受传入连接),而是作为客户端。查看net.createConnection而不是 net.createServer。

于 2013-02-12T04:53:04.550 回答