【问题标题】:Memcached Could not connect to Remote Server | memcached.jsMemcached 无法连接到远程服务器 |内存缓存.js
【发布时间】:2018-05-02 13:00:44
【问题描述】:

我的 API 本地环境

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

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

我们有一个 Node API,我们在其中使用包 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。 我可以使用像 c:/> telnet X.X.X.X 11211 这样的 telnet 命令从我的系统连接这个 X.X.X.X 服务器,并且它可以工作。

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 服务器,你可以看到远程服务器 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;

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

【问题讨论】:

  • 我也面临同样的问题。有没有办法解决这个问题?

标签: node.js memcached


【解决方案1】:

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

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

“memcache.connect”方法似乎有些问题,因为它不会覆盖本地主机服务器。要使其工作,您必须在构造函数中提及 memcached 服务器的 IP,如文档中所述:

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

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

$ sudo ufw allow 11211

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

telnet 192.168.10.10:11211

如果这不起作用,您的服务器可能已停止工作,因此您需要将其作为服务或进程启动:

作为一个过程开始:

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

作为服务启动:

$ sudo systemctl start memcached

$ sudo service memcached start

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

$ sudo nano /etc/default/ufw

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

$ sudo apt-get install memcached

希望对你有帮助。

【讨论】:

  • 是的,我已经做到了,我按照您回答的方式进行操作。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多