sql >> Databasteknik >  >> NoSQL >> Redis

Hur använder man redis PUBLISH/SUBSCRIBE med nodejs för att meddela klienter när datavärden ändras?

GAMMEL använd endast en referens

Beroenden

använder express, socket.io, node_redis och sist men inte minst exempelkoden från media fire.

Installera node.js+npm(som icke-rot)

Först bör du (om du inte har gjort detta ännu) installera node.js+npm på 30 sekunder (på rätt sätt eftersom du INTE ska 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

Installationsberoenden

Efter att du har installerat node+npm bör du installera beroenden genom att utfärda:

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

Ladda ned exempel

Du kan ladda ner komplett prov från mediafire.

Packa upp paketet

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

Vad finns inuti 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>

Starta server

cd pbsb    
node app.js

Starta webbläsaren

Bäst om du startar google chrome (på grund av websockets stöd, men inte nödvändigt). Besök http://localhost:3000 för att se exempel (i början ser du inget annat än PubSub som titel).

Men på publish till kanal pubsub du borde se ett meddelande. Nedan publicerar vi "Hello world!" till webbläsaren.

Från ./redis-cli

publish pubsub "Hello world!"


  1. mgo - frågeprestanda verkar konsekvent långsam (500-650ms)

  2. Bulk insatsprestanda i MongoDB för stora samlingar

  3. Åtkomst till meteorproduktionsdatabasen 2016

  4. hur kan jag ansluta till en fjärransluten mongo-server från Mac OS-terminalen