Socket.IO購読Redis Channel


Node.jsプログラムではSocket.IOはリアルタイムアプリケーションを構築する.しかし、時にはバックグラウンドとSocket.IOは、Java、PythonのWebバックグラウンドなど、異機種です.この場合,Redisのサブスクリプション/パブリケーションメカニズムを中継として利用し,異機種のバックグラウンドとSocketを接続することができる.IOサービス.ここではSocket.IOでRedis Channelを購読する.
Java/Python/C#でメッセージをRedis Channelに公開する方法については、対応言語のRedis SDKを参照してください.
ソフトウェアのインストール
  • Redis.公式サイトを参照できますhttp://redis.io/をインストールします.ここでダウンロードできます.
  • Node.js.公式サイトでもhttps://nodejs.org/直接ダウンロードします.

  • その後、Socketとしてフォルダを作成します.IOサーバプロジェクトは、Socket.IOとNodeをインストールする.jsのredisクライアント.
       npm install Socket.IO redis --save
    

    Socket.IO

    app.jsファイル、Nodeベースを く.js HTTPモジュールのSocket.IOサーバ.2つのネーミングスペース、1つのnotification、1つのchattingを します.

       var server = require('http').createServer();
    var io = require('Socket.IO')(server);
    io
        .of('/notification')
        .on('connection', socket => {
            console.log('user connected to notification');
            socket.on('disconnect', () => console.log('user disconnected'));
        });
    
    io
        .of('/chatting')
        .on('connection', socket => console.log('user connected to message'));
    
    server.listen(3001, () => console.log('Socket.IO listen to port 3001'));
    

    notificaiton :

       var socket = io('/notification');
    socket.on('message', function (msg) {
        console.log(msg);
    });
    

    HTML <script src="/path/to/Socket.IO.js"></script>、 http://Socket.IO/download/.もっとIOの は、 を してください.http://Socket.IO/docs/#how-to-use
    Redis Channelの
    のサーバファイルにredisを し、すべてのチャンネルの を できるクライアントを します. チャネルのメッセージは、switch-caseによって され る.

       var redis = require('redis');
    var redisClient = redis.createClient();
    var NOTIFICATION_CHANNEL = 'notification_channel', CHATTING_CHANNEL = 'chatting_channel';
    
    redisClient.on('message', function(channel, message) {
        switch (channle){
            case NOTIFICATION_CHANNEL:
                console.log('notification received:', message);
                io.of('/notification').emit('message', message);
                break;
            case CHATTING_CHANNEL:
                console.log('chatting received:', message);
                io.of('/chatting').emit('message', message);
                break;
        }
    });
    redisClient.subscribe(NOTIFICATION_CHANNEL);
    redisClient.subscribe(CHATTING_CHANNEL);
    

    redis.createClient()のパラメータには、Redisサーバのホスト 、ポート、パスワードなどの を できます. するドキュメントを してください.
    テスト
    Socketを IOサーバ:

       $ node app.js
    Socket.IO listen to port 3001
    

    (Bash、Zsh…) redis-cli、メッセージを します.

       $ redis-cli
    127.0.0.1:6379> publish notification "fuck you!"
    

    Socket.IO notification received: fuck you!で、/messageネーミングスペースに されているすべてのブラウザ もメッセージを し、コンソールに します.