【问题标题】:Redis Pub/Sub not displaying published message in client using redis-cliRedis Pub/Sub 未使用 redis-cli 在客户端显示已发布的消息
【发布时间】:2013-10-15 02:26:04
【问题描述】:

大家好,我在 redis pub/sub 中遇到问题,因为我的客户端没有显示我在 redis-cli 中发布的消息。我使用了在 stackoverflow 中找到的代码并做了一些修改。 Here is the link and code.希望你能帮帮我,我的目标是在redis-cli中使用redis publish 将消息发布到客户端index.html。我以前做过,但我不能让它再次工作。提前谢谢各位。

这是我的客户 index.html

<html>
<head>
    <title>PubSub</title>
    <script src="/socket.io/socket.io.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>
    <!-- <script src="/javascripts/socket.js"></script> -->
</head>
<body>
    <div id="content"></div>
    <script>
            var socket = io.connect('http://localhost:3000');    
            var content = $('#content');

            socket.on('connect', function() {
            });

            socket.on('message', function (message){
                content.prepend(message + '<br />');
            }) ;

            socket.on('disconnect', function() {
                console.log('disconnected');
                content.html("<b>Disconnected!</b>");
            });

            socket.connect();
        });
    </script>
</body>
</html>

这是我的 server.js

var express = require('express');
var app = express();
var redis = require('redis');
var http = require('http');
var server = http.createServer(app);
var socket = require('socket.io').listen(server);
var publish = redis.createClient();

app.listen(3000);
    console.log("Express server listening on port 3000")

    app.get('/', function (req,res) {
        res.sendfile(__dirname + '/public/index.html');
    });

socket.on('connection', function (client) {
        var subscribe = redis.createClient();
        subscribe.subscribe('pubsub');

        subscribe.on("message", function (channel, message) {
            publish.send(message);
        });

        publish.on('message', function (msg) {
        });

        publish.on('disconnect', function() {
            subscribe.quit();
        });
    });

【问题讨论】:

    标签: javascript node.js express redis socket.io


    【解决方案1】:

    Redis 不会为您向连接的客户端发送数据。您必须指示 Socket.IO 发出数据:

    subscribe.on("message", function (channel, message) {
      socket.emit('message', message);
    });
    

    【讨论】:

    • 您是通过订阅还是发布连接接收消息?请澄清。
    • 我正在通过订阅接收消息先生,我的 html 客户端没有显示它。我的代码还有其他问题吗?谢谢先生。
    • 你能验证 Redis subscribe 确实在接收任何数据吗?
    • 我已经通过 cli 订阅并通过 cli 发布,但消息未显示在客户端页面中。
    • 我的客户先生第 9 行中已经有 &lt;div id="content"&gt;&lt;/div&gt;。:(
    猜你喜欢
    • 1970-01-01
    • 2015-04-01
    • 1970-01-01
    • 2015-11-20
    • 1970-01-01
    • 2014-02-07
    • 2012-10-13
    • 2020-09-26
    • 2013-07-28
    相关资源
    最近更新 更多