Redis
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> Redis

Làm thế nào để sử dụng redis PUBLISH / SUBSCRIBE với nodejs để thông báo cho khách hàng khi giá trị dữ liệu thay đổi?

CŨ chỉ sử dụng tham chiếu

Sự phụ thuộc

sử dụng express, socket.io, node_redis và mã mẫu cuối cùng nhưng không kém phần quan trọng từ media fire.

Cài đặt node.js + npm (không phải root)

Trước tiên, bạn nên (nếu bạn chưa thực hiện việc này) cài đặt node.js + npm trong 30 giây (đúng cách vì bạn KHÔNG NÊN chạy npm dưới dạng 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

Cài đặt phần phụ thuộc

Sau khi cài đặt node + npm, bạn nên cài đặt các phụ thuộc bằng cách phát hành:

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

Tải xuống mẫu

Bạn có thể tải xuống mẫu hoàn chỉnh từ mediafire.

Giải nén gói

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

Có gì bên trong 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>

Khởi động máy chủ

cd pbsb    
node app.js

Khởi động trình duyệt

Tốt nhất nếu bạn khởi động google chrome (vì hỗ trợ websockets, nhưng không cần thiết). Truy cập http://localhost:3000 để xem mẫu (ban đầu bạn không thấy gì ngoài PubSub như tiêu đề).

Nhưng trên publish tới kênh pubsub bạn sẽ thấy một tin nhắn. Dưới đây chúng tôi xuất bản "Hello world!" vào trình duyệt.

Từ ./redis-cli

publish pubsub "Hello world!"


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. spring-data-redis redisTemplate Exception

  2. Tôi có thể tuần tự hóa một đối tượng cá thể ruby ​​Digest ::SHA1 không?

  3. Tôi có thể đặt TTL toàn cầu trong redis không?

  4. Hiệu quả của Java + Redis so với Java đơn giản cho các ứng dụng chuyên sâu về dữ liệu?

  5. ImportError:Không có mô-đun nào có tên là redis