0

我有一个 memcached 状态,我想在其中保存一些东西。当一个节点连接到我的应用程序的拓扑时,我希望它能够将自己添加到该类型的连接节点列表中。我正在尝试通过嵌套查询来做到这一点:

mc_cli.connect(function() {
mc_cli.get( key, function(err, response) {
    if(err.type == 'NOT_FOUND'){
        //save myself
        mc_cli.connect(function() {
            mc_cli.add( GLOBAL_KEY, uid, { flags: 0, exptime: 0}, function(err, status) {
                if (!err) { 
                    console.log(status);
                }
                else {
                    console.log(err);
                }
            });
        });
    }
[...]

此代码属于else以下错误:

{ type: 'CONNECTION_ERROR',
  description: 'Lost connection to server.' }

基本上代码所做的是,由于没有人设置连接的 ID 数组,因此执行代码的第一个节点是负责执行此操作的节点。我没有显示以下代码,它只是获取 ID 列表并添加自己的。错误发生在显示的代码段中。现在,在库中打印此错误的代码如下:

try {
    this.sock.write(command + crlf);
    if (value) {
      this.sock.write(value);
      this.sock.write(crlf);
    }
    this.queue.enqueue({ handler: handler, callback: callback });
}
catch (x) {
    callback({ type: 'CONNECTION_ERROR', description: 'Lost connection to server.' }, null);
}

这不是很有帮助,因为我不明白是什么原因造成的。我想知道我在做什么是错的。我正在使用一些我习惯于使用 mongoDB 的嵌套东西,但我不确定我是否可以对 memcached 做同样的事情,尤其是这个库。有没有人有关于如何解决这个问题的想法?谢谢。

编辑:我忘了添加我正在使用的库的链接:超频/mc

4

1 回答 1

1

尝试解决这个问题一段时间后,我意识到嵌套连接是可能的,错误不是由它引起的。我发现我正在将结构不正确的数据传递给该.add()方法。它接受的不是像 aNumber或 a这样简单的东西String,而是Buffers。所以我必须像这样转换我想保存的每一个数据:

new Buffer(data)

使用默认编码(我相信它是utf8)。我希望这能将某人从地狱中拯救出来。我的问题的主要问题是我收到的错误根本没有意义。

于 2012-11-09T11:19:09.690 回答