sql >> Database >  >> NoSQL >> Redis

Hoe gebruik je redis PUBLISH/SUBSCRIBE met nodejs om klanten op de hoogte te stellen wanneer gegevenswaarden veranderen?

OUD gebruik alleen een referentie

Afhankelijkheden

gebruikt express, socket.io, node_redis en last but not least de voorbeeldcode van media fire.

Installeer node.js+npm(als niet-root)

Eerst moet je (als je dit nog niet hebt gedaan) node.js+npm binnen 30 seconden installeren (op de juiste manier omdat je NIET voer npm uit als 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

Installeer afhankelijkheden

Nadat u node+npm hebt geïnstalleerd, moet u afhankelijkheden installeren door:

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

Voorbeeld downloaden

U kunt het volledige voorbeeld downloaden van mediafire.

Pakket uitpakken

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

Wat zit er in de rits

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

Het beste als u Google Chrome start (vanwege ondersteuning voor websockets, maar niet noodzakelijk). Bezoek http://localhost:3000 om voorbeeld te zien (in het begin zie je niets anders dan PubSub als titel).

Maar op publish naar kanaal pubsub je zou een bericht moeten zien. Hieronder publiceren we "Hello world!" naar de browser.

Van ./redis-cli

publish pubsub "Hello world!"


  1. Mongodb-aggregatiepijplijn hoe een groepspush te beperken

  2. Een beheerdersgebied creëren in vijf minuten met AdminBro, express, mongoDB, mongoose

  3. Redis start niet als Windows-service op Windows7

  4. Een groot aantal records in een verzameling bijwerken