sql >> Database teknologi >  >> NoSQL >> Redis

Hvordan bruger man redis PUBLISH/SUBSCRIBE med nodejs til at underrette klienter, når dataværdier ændres?

GAMMEL brug kun en reference

Afhængigheder

bruger express, socket.io, node_redis og sidst men ikke mindst prøvekoden fra media fire.

Installer node.js+npm(som ikke-rod)

Først bør du (hvis du ikke har gjort dette endnu) installere node.js+npm på 30 sekunder (den rigtige måde, for du bør IKKE kør npm som root ):

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

Installer afhængigheder

Efter du har installeret node+npm, skal du installere afhængigheder ved at udstede:

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

Download eksempel

Du kan downloade et komplet eksempel fra mediafire.

Udpak pakke

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

Hvad er inde i lynlåsen

./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>

Start server

cd pbsb    
node app.js

Start browser

Bedst hvis du starter google chrome (på grund af websockets support, men ikke nødvendigt). Besøg http://localhost:3000 for at se eksempel (i begyndelsen ser du ikke andet end PubSub som titel).

Men på publish til kanal pubsub du skulle se en besked. Nedenfor udgiver vi "Hello world!" til browseren.

Fra ./redis-cli

publish pubsub "Hello world!"


  1. Sådan får du et tilbagekald på MongoDB collection.find()

  2. Opdater array-objekt baseret på id?

  3. hvordan kan jeg overføre infinity til redis fra python?

  4. Introduktion til distribueret cache i Hadoop