Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从node.js连接到Memcached服务时使用_Php_Node.js_Memcached - Fatal编程技术网

Php 从node.js连接到Memcached服务时使用

Php 从node.js连接到Memcached服务时使用,php,node.js,memcached,Php,Node.js,Memcached,Node.js的新增功能。在SO中搜索了大量答案,但未能找到此问题的适当解决方案。我使用node.js的自定义memcache服务器代码从使用php存储的memcached服务获取数据,只添加了以下相关代码: var net = require("net"); net.createServer(function(socket) { socket.setEncoding('utf8'); var cmd = {}; var incoming = ''; s

Node.js的新增功能。在SO中搜索了大量答案,但未能找到此问题的适当解决方案。我使用node.js的自定义memcache服务器代码从使用php存储的memcached服务获取数据,只添加了以下相关代码:

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检索任何数据

那么,是否有任何方法可以从node.js memcache server code.使用相同的端口11211连接到memcached服务。。? 我是Node.js新手,因此无法找到任何可行的解决方案。那么,我如何在不使用node.js memcached模块的情况下解决这个问题,或者我完全走错了路。。?顺便说一句,我正在Windows7上运行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');
        });
}

但在控制台上,它显示创建的套接字,然后抛出error::error connect econnreflused

这是因为节点应该与memcached交互,而不是作为绑定端口和接受传入连接的服务器,而是作为客户端。查看而不是net.createServer。

感谢您的回复,我们将改为使用createConnection进行检查。请更新上面的代码以准确表示您现在正在执行的操作。重新启动所有操作,并使用net.createConnection正常工作。。谢谢你的帮助