Php 从node.js连接到Memcached服务时使用
Node.js的新增功能。在SO中搜索了大量答案,但未能找到此问题的适当解决方案。我使用node.js的自定义memcache服务器代码从使用php存储的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
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正常工作。。谢谢你的帮助