Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Redis/Node.js-2个客户端(1个pub/sub)导致写入问题_Javascript_Node.js_Redis_Publish Subscribe - Fatal编程技术网

Javascript Redis/Node.js-2个客户端(1个pub/sub)导致写入问题

Javascript Redis/Node.js-2个客户端(1个pub/sub)导致写入问题,javascript,node.js,redis,publish-subscribe,Javascript,Node.js,Redis,Publish Subscribe,尝试创建两个客户;一个是pub/sub,另一个是标准连接。这不可能吗?必须有一种方法来抽象它才能工作:)基本上,如果在运行test.js之后执行get key,我所看到的就是“valueBefore”。输出: node test.js Reply: OK /Users/franklovecchio/Desktop/development/node/node_modules/redis/index.js:487 throw new Error("Connection in pu

尝试创建两个客户;一个是pub/sub,另一个是标准连接。这不可能吗?必须有一种方法来抽象它才能工作:)基本上,如果在运行test.js之后执行
get key
,我所看到的就是“valueBefore”。输出:

node test.js 
Reply: OK

/Users/franklovecchio/Desktop/development/node/node_modules/redis/index.js:487
        throw new Error("Connection in pub/sub mode, only pub/sub commands may
              ^
Error: Connection in pub/sub mode, only pub/sub commands may be used
    at RedisClient.send_command (/Users/franklovecchio/Desktop/development/node/node_modules/redis/index.js:487:15)
    at RedisClient.<anonymous> (/Users/franklovecchio/Desktop/development/node/node_modules/redis/index.js:597:27)
    at Object._onTimeout (/Users/franklovecchio/Desktop/development/node/distributed-cache/client/test.js:19:12)
    at Timer.callback (timers.js:83:39)

您可能需要发布来自
client1
的消息,因为
client2
专用于监听特定频道上的消息。自述文件中很少有关于这种行为的文字:

如果在发布/订阅模式下需要向Redis发送常规命令, 只需打开另一个连接

var redis = require('redis');

var client1 = redis.createClient();
var client2 = redis.createClient();

client2.on('message', function (channel, message) {
    console.log('Received a message on channel: ' + channel);       

    client1.set('key', message, redis.print);

});

client2.subscribe('channel');

client1.set('key', 'valueBefore', redis.print);

setTimeout(
    function() {
        client2.publish('channel', 'valueAfter');
    },3000
);