Memcached无法连接到远程服务器| memcached.js

时间:2018-05-02 13:00:44

标签: node.js memcached

我的本​​地API环境

node -v: v8.9.4
npm  -v:  5.6.0

Package 
memcached.js: "memcached": "^2.2.2"

我们有一个Node API,我们使用package memcached.js连接到具有以下配置的Memcache服务器。

MEMCACHED_CONFIG:
{
    MAX_VALUE: 1024,
    SERVER: "X.X.X.X",
    PORT: 11211,
    COMPLETE_PATH: "X.X.X.X:11211",
    CACHE_TIMEOUT: 3600,
    POOL_SIZE: 50,
    maxKeySize: 1024,
    timeout: 5000
}

所以 X.X.X.X 是我们的Memcache服务器正在运行的远程服务器IP。 我可以使用telnet命令从我的系统连接这个 X.X.X.X 服务器,如 c:/> telnet X.X.X.X 11211 ,它有效。

cacheUtility.js

var MEMCACHED_CONFIG= require('./MEMCACHED_CONFIG');
var Memcached = require('memcached');
Memcached.config.maxValue = MEMCACHED_CONFIG.MAX_VALUE;
Memcached.config.poolSize = MEMCACHED_CONFIG.POOL_SIZE;
Memcached.config.maxKeySize= MEMCACHED_CONFIG.maxKeySize;
Memcached.config.timeout=  MEMCACHED_CONFIG.timeout;

var memcached = new Memcached();
memcached.connect(MEMCACHED_CONFIG.COMPLETE_PATH, function( err, 
conn ){
   if( err ) {
     CONFIG.CONSOLE_MESSAGE("Cache Connect Error "+conn.server);
  }
 });

我们使用上面的代码连接到Memcached Server,你可以看到远程服务器IP来自MEMCACHED_CONFIG。

我的问题是它始终尝试连接到127.0.0.1服务器而不是传递远程Memcached服务器。因此,为了运行它,我必须在核心包的memcached.js文件中进行更改。

C:\ BitBucketProjects \ Licensor Server \ node_modules \ memcached \ lib \ memcached.js

function Client (args, options) {
var servers = []
, weights = {}
, regular = 'localhost:11211'
 //, regular = 'X.X.X.X:11211'
, key;

我不想对核心软件包进行任何更改。 为什么它没有连接到给定的服务器?

1 个答案:

答案 0 :(得分:0)

当您在与使用该服务器的服务器不同的计算机上设置了内存缓存服务器时,请务必提及服务器IP和选项,否则默认为localhost。您可以看到,如果您查看客户端的“ server”属性(使用NodeJs memcached客户端版本2.2.2):

var Memcached = require('memcached');
var memcached = new Memcached();
console.log(memcached.server);

“ memcache.connect”方法似乎存在一些问题,因为它不会覆盖localhost服务器。要使其正常工作,必须在文档中提及构造函数中的memcached服务器IP:

var Memcached = require('memcached');
var memcached = new Memcached('192.168.10.10:11211');

现在,如果在主机上打开了11211端口,则应该可以连接到服务器而不会出现问题。如果不允许,您可以在Memcached主机上执行以下命令以打开端口:

$ sudo ufw allow 11211

为确保能够连接到内存缓存服务器,请使用以下命令:

telnet 192.168.10.10:11211

即使这样仍然无法正常工作,则您的服务器可能已停止工作,因此您需要以服务或进程形式启动它:

从流程开始:

$ memcached -u memcached -d -m 30 -l 192.168.10.10 -p 11211

从服务开始:

$ sudo systemctl start memcached

OR

$ sudo service memcached start

仅供参考,对于那些可能不知道要在网络上公开Memcached服务器的用户,您可以像上面的命令或memcached配置文件中那样指定IP和端口。要提供默认配置,请在以下文件中查找“ -l 127.0.0.1”,并将回送地址替换为主机服务器的网络IP:

$ sudo nano /etc/default/ufw

当然,以上命令仅在服务器上安装了memcached时才有效,如果未安装,请先运行以下命令进行安装:

$ sudo apt-get install memcached

希望对您有帮助。