首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Memcached无法连接到远程服务器\ memcached.js

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

Stack Overflow用户
提问于 2018-05-02 13:00:44
回答 1查看 1.8K关注 0票数 2

我的本地API环境

代码语言:javascript
复制
node -v: v8.9.4
npm  -v:  5.6.0

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

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

代码语言:javascript
复制
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是运行Memcache服务器的远程服务器IP。我可以使用telnet命令(如telnet c:/>telnetX.X 11211 )从我的系统连接这个X.x服务器,它可以工作。

cacheUtility.js

代码语言:javascript
复制
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 Server。因此,为了运行它,我必须修改核心包的memcached.js文件。

C:\BitBucketProjects\许可方Server\node_modules\memcached\lib\memcached.js

代码语言:javascript
复制
function Client (args, options) {
var servers = []
, weights = {}
, regular = 'localhost:11211'
 //, regular = 'X.X.X.X:11211'
, key;

我不想在核心包里做任何改变。为什么它没有连接到给定的服务器?

EN

回答 1

Stack Overflow用户

发布于 2019-08-21 13:03:17

当在与使用memcached服务器的服务器不同的机器上安装memcached服务器时,总是提到服务器IP和选项,否则默认为localhost。您可以看到,如果您查看客户端的"server“属性(使用NodeJs memcached客户端版本2.2.2):

代码语言:javascript
复制
var Memcached = require('memcached');
var memcached = new Memcached();
console.log(memcached.server);

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

代码语言:javascript
复制
var Memcached = require('memcached');
var memcached = new Memcached('192.168.10.10:11211');

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

代码语言:javascript
复制
$ sudo ufw allow 11211

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

代码语言:javascript
复制
telnet 192.168.10.10:11211

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

作为一个过程开始:

代码语言:javascript
复制
$ memcached -u memcached -d -m 30 -l 192.168.10.10 -p 11211

从服务开始:

代码语言:javascript
复制
$ sudo systemctl start memcached

代码语言:javascript
复制
$ sudo service memcached start

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

代码语言:javascript
复制
$ sudo nano /etc/default/ufw

当然,上面的命令只有在服务器上安装memcached时才能工作,如果没有安装,那么首先运行以下命令来安装它:

代码语言:javascript
复制
$ sudo apt-get install memcached

希望能帮上忙。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50135302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档