sql >> データベース >  >> NoSQL >> Redis

nodejsでredisPUBLISH/ SUBSCRIBEを使用して、データ値が変更されたときにクライアントに通知するにはどうすればよいですか?

    OLDは参照のみを使用します

    依存関係

    express、socket.io、node_redisを使用し、最後にメディアファイアのサンプルコードを使用します。

    node.js + npmを(非ルートとして)インストールします

    まず、(まだこれを行っていない場合は)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.
    

    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>
    

    サーバーの起動

    cd pbsb    
    node app.js
    

    ブラウザを起動

    google chromeを開始する場合に最適です(WebSocketがサポートされているためですが、必須ではありません)。 http://localhost:3000にアクセスします サンプルを表示するには(最初はPubSub以外は何も表示されません タイトルとして)。

    しかし、publishでは チャネルpubsub メッセージが表示されます。以下に、"Hello world!"を公開します。 ブラウザに。

    ./redis-cliから

    publish pubsub "Hello world!"
    


    1. 一意のアトミックIDジェネレーターとしてのRedis-競合状態を回避するためのWebアプリのスレッドセーフな方法

    2. 在庫管理システムのSQLとNoSQL

    3. RedisでHSCANコマンドを使用するにはどうすればよいですか?

    4. 属性のないクラスでJsonConverterをグローバルに使用する