Redis
 sql >> база данни >  >> NoSQL >> Redis

Как да използвам redis PUBLISH/SUBSCRIBE с nodejs, за да уведомявам клиентите, когато стойностите на данните се променят?

OLD използва само препратка

Зависимости

използва express, socket.io, node_redis и не на последно място примерния код от медиен пожар.

Инсталирайте node.js+npm(като не root)

Първо трябва (ако все още не сте го направили) инсталирате node.js+npm за 30 секунди (правилният начин, защото НЕ) стартирайте npm като 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

Инсталиране на зависимости

След като инсталирате node+npm, трябва да инсталирате зависимости, като издадете:

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

Изтеглете извадка

Можете да изтеглите пълната проба от mediafire.

Разархивирайте пакета

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

Какво има вътре в ципа

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

Стартиране на сървъра

cd pbsb    
node app.js

Стартирайте браузъра

Най-добре е да стартирате google chrome (поради поддръжка на уебсокети, но не е необходимо). Посетете http://localhost:3000 за да видите пример (в началото не виждате нищо освен PubSub като заглавие).

Но при publish към канал pubsub трябва да видите съобщение. По-долу публикуваме "Hello world!" към браузъра.

От ./redis-cli

publish pubsub "Hello world!"


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как да съхранявате масив от хешове в redis

  2. Комбинирайте два екземпляра на Redis в един екземпляр с два dbs

  3. Redis бавно получава големи низове

  4. Използване на Redis за кеширане на SQL резултат

  5. Обратно пагинация чрез сортиран набор Redis