Redis
 sql >> Datenbank >  >> NoSQL >> Redis

Wie verwendet man redis PUBLISH/SUBSCRIBE mit nodejs, um Clients zu benachrichtigen, wenn sich Datenwerte ändern?

ALT verwendet nur eine Referenz

Abhängigkeiten

verwendet express, socket.io, node_redis und nicht zuletzt den Beispielcode von media fire.

Installieren Sie node.js+npm (als Nicht-Root)

Zuerst sollten Sie (falls Sie dies noch nicht getan haben) node.js+npm in 30 Sekunden installieren (der richtige Weg, weil Sie NICHT sollten Führen Sie npm als root aus ):

echo 'export PATH=$HOME/local/bin:$PATH' >> ~/.bashrc
. ~/.bashrc
mkdir ~/local
mkdir ~/node-latest-install
cd ~/node-latest-install
curl http://nodejs.org/dist/node-latest.tar.gz | tar xz --strip-components=1
./configure --prefix=~/local
make install # ok, fine, this step probably takes more than 30 seconds...
curl http://npmjs.org/install.sh | sh

Installieren Sie Abhängigkeiten

Nachdem Sie node+npm installiert haben, sollten Sie Abhängigkeiten installieren, indem Sie Folgendes ausgeben:

npm install express
npm install socket.io
npm install hiredis redis # hiredis to use c binding for redis => FAST :)

Beispiel herunterladen

Sie können das vollständige Beispiel von Mediafire herunterladen.

Paket entpacken

unzip pbsb.zip # can also do via graphical interface if you prefer.

Was ist drin zip

./app.js

const PORT = 3000;
const HOST = 'localhost';

var express = require('express');

var app = module.exports = express.createServer();

app.use(express.staticProvider(__dirname + '/public'));

const redis = require('redis');
const client = redis.createClient();

const io = require('socket.io');

if (!module.parent) {
    app.listen(PORT, HOST);
    console.log("Express server listening on port %d", app.address().port)

    const socket  = io.listen(app);

    socket.on('connection', function(client) {
        const subscribe = redis.createClient();
        subscribe.subscribe('pubsub'); //    listen to messages from channel pubsub

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

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

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

./public/index.html

<html>
<head>
    <title>PubSub</title>
    <script src="/socket.io/socket.io.js"></script>
    <script src="/javascripts/jquery-1.4.3.min.js"></script>
</head>
<body>
    <div id="content"></div>
    <script>    
        $(document).ready(function() {
            var socket = new io.Socket('localhost', {port: 3000, rememberTransport: false/*, transports: ['xhr-polling']*/});
            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 starten

cd pbsb    
node app.js

Browser starten

Am besten, wenn Sie Google Chrome starten (wegen Websockets-Unterstützung, aber nicht notwendig). Besuchen Sie http://localhost:3000 um Beispiel zu sehen (am Anfang sehen Sie nichts als PubSub als Titel).

Sondern auf publish um pubsub zu kanalisieren Sie sollten eine Nachricht sehen. Nachfolgend veröffentlichen wir "Hello world!" zum Browser.

Von ./redis-cli

publish pubsub "Hello world!"