node.js - Memcached 无法连接到远程服务器 | 内存缓存.js
问题描述
我的 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
}
所以XXXX是我们的 Memcache 服务器运行的远程服务器 IP。我可以 通过使用像c:/> telnet XXXX 11211这样的 telnet 命令从我的系统连接这个XXXX 服务器,它可以工作。
缓存实用程序.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\许可服务器\node_modules\memcached\lib\memcached.js
function Client (args, options) {
var servers = []
, weights = {}
, regular = 'localhost:11211'
//, regular = 'X.X.X.X:11211'
, key;
我不想对核心包进行任何更改。为什么它没有连接到给定的服务器?
解决方案
当您在与使用它的服务器不同的机器上设置 memcached 服务器时,请始终提及服务器 IP 和选项,否则默认为 localhost。如果您查看客户端的“服务器”属性(使用 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
我希望它有所帮助。
推荐阅读
- python - 带有 tkinter 的嵌套类工厂
- javascript - 如何更改此翻书?
- python - 如何识别与主表不匹配的条目和查找列以供快速参考
- c# - 为什么 web.config 在发布时创建而不是在 Asp.Net Core API 中构建项目?
- flutter - TextFormField 多行输入
- php - Laravel:使用无密码的用户拒绝访问
- sqitch - 将更改部署到 azure 时,sqitch deploy 命令失败
- python - pandasql 通配符运算符
- javascript - ENOENT:没有这样的文件或目录,打开'/tmp/build_01409f5f7cae8788b3a2ccca28c521d8/client/package.json'
- android - CoroutineWorker:在 cancelPendingIntent 操作上中断 doWork()