복붙노트

[REDIS] 어떻게 / 때 데이터 값의 변화를 고객에게 통지 nodejs으로 회원님의 사이트 레디 스를 사용 하는가?

REDIS

어떻게 / 때 데이터 값의 변화를 고객에게 통지 nodejs으로 회원님의 사이트 레디 스를 사용 하는가?

나는 NodeJS와 레디 스와 이벤트 중심의 발행 / 구독 응용 프로그램을 쓰고 있어요. 나는 웹 클라이언트에 통지하는 방법의 예를 필요로 할 때 레디 스 변화에 데이터 값.

해결법

  1. ==============================

    1.용도는 미디어 화재에서 샘플 코드를 node_redis 그리고 마지막으로, 표현 Socket.IO에.

    용도는 미디어 화재에서 샘플 코드를 node_redis 그리고 마지막으로, 표현 Socket.IO에.

    먼저해야 (당신이하지 않은 경우이 아직) 30초 (root로 NPM을 실행하지 않아야하기 때문에 올바른 방법)에 Node.js를 + NPM를 설치 :

    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
    

    당신이 노드 +의 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
    

    최고의 당신은 크롬을 구글 시작 (WebSocket을 지원하기 때문에,하지만 필요는 없습니다)합니다. 방문에 http : // localhost를 : 3000 (당신이 제목으로 아무것도하지만 PubSub 표시되지 않는 시작에서) 샘플을 확인합니다.

    당신이 메시지가 표시되어야합니다 pubsub 그러나에 채널에 게시 할 수 있습니다. 아래 우리는에 "Hello World!"게시 브라우저에.

    publish pubsub "Hello world!"
    
  2. ==============================

    2.여기에 많은 의존성로하지 않고 단순화 된 예입니다. 당신은 여전히 ​​hiredis 레디 스를 설치 NPM해야합니까

    여기에 많은 의존성로하지 않고 단순화 된 예입니다. 당신은 여전히 ​​hiredis 레디 스를 설치 NPM해야합니까

    노드 자바 스크립트 :

    var redis = require("redis"),
        client = redis.createClient();
    
    client.subscribe("pubsub");
    client.on("message", function(channel, message){
      console.log(channel + ": " + message);
    });
    

    ... 넣어하는 pubsub.js 파일과 실행 노드 pubsub.js에서

    대가로, 디 :

    redis> publish pubsub "Hello Wonky!"
    (integer) 1
    

    표시해야하는 : pubsub : 안녕하세요 흔들 흔들! 터미널 실행중인 노드에서! 축하!

    2013년 4월 23일 추가 : 나는 또한 메모를 만들고 싶어 때이 가입자 모드로 전환 가입자 명령으로 제한됩니다 술집 / 서브 채널에 클라이언트 등록합니다. 당신은 레디 스 클라이언트의 추가 인스턴스를 작성해야합니다. CLIENT1 = redis.createClient (), CLIENT2 = redis.createClient () 한 가입자 모드에있을 수 있고, 다른 하나는 일반 DB 명령을 실행할 수 있습니다.

  3. ==============================

    3.우리는 레디 스가 게시 / 구독 ( "출판 / 하위")을 이해하려고 노력하고 기존의 모든 예제 중 하나를 너무 단순, 오래된 또는 더 테스트를했다 없었다. 우리는 Hapi.js + Socket.io + 레디 스 펍을 사용하여 완전한 실시간 채팅을 썼다 그래서 / 엔드 - 투 - 엔드 테스트와 하위 예!

    우리는 레디 스가 게시 / 구독 ( "출판 / 하위")을 이해하려고 노력하고 기존의 모든 예제 중 하나를 너무 단순, 오래된 또는 더 테스트를했다 없었다. 우리는 Hapi.js + Socket.io + 레디 스 펍을 사용하여 완전한 실시간 채팅을 썼다 그래서 / 엔드 - 투 - 엔드 테스트와 하위 예!

    술집 / 하위 구성 요소는 Node.js를 코드 몇 줄 수 있습니다 : https://github.com/dwyl/hapi-socketio-redis-chat-example/blob/master/lib/chat.js#L33-L40

    오히려 (어떤 맥락없이) 여기에 붙여 넣기보다 우리는 / 체크 아웃하는 것이 좋습니다 예를보십시오.

    우리는 Hapi.js를 사용하지만 chat.js 파일이 드 결합 게요!에서하고 쉽게 기본 Node.js를 HTTP 서버와 함께 사용하거나 할 수 있습니다 내장 된 표현 (등)

  4. ==============================

    4.핸들은 종료에서 정지 nodejs에 오류 레디 스. 당신은 서면으로하여이 작업을 수행 할 수 있습니다;

    핸들은 종료에서 정지 nodejs에 오류 레디 스. 당신은 서면으로하여이 작업을 수행 할 수 있습니다;

    subcribe.on("error", function(){
      //Deal with error
    })
    

    난 당신이 메시지를 게시 가입되어 동일한 클라이언트를 사용하고 있기 때문에 당신이 예외를 얻을 생각합니다. 메시지를 게시하기위한 별도의 클라이언트를 작성하고 그 문제를 해결할 수 있습니다.

  5. ==============================

    5.GitHub의에 acani 노드, 특히 파일 acani 노드 - server.js를 확인하십시오. 이 링크가 깨진 경우, acani의 GitHub의 공개 저장소들 사이 acani 채팅 서버를 찾습니다.

    GitHub의에 acani 노드, 특히 파일 acani 노드 - server.js를 확인하십시오. 이 링크가 깨진 경우, acani의 GitHub의 공개 저장소들 사이 acani 채팅 서버를 찾습니다.

  6. ==============================

    6.당신은 변경해야 socket.io 0.7이 작업 및 외부 웹 서버를 원한다면합니다 (staticProvider 외에를 -> 정적 문제) :

    당신은 변경해야 socket.io 0.7이 작업 및 외부 웹 서버를 원한다면합니다 (staticProvider 외에를 -> 정적 문제) :

    a) (즉, VAR 소켓 io.connect = ( 'http://my.domain.com:3000') 도메인 네임 대신에 로컬 호스트를 제공 함)에 index.html을

    app.js에서 b) 변화 HOST (즉 CONST HOST = 'my.domain.com')

    c) 및 app.js 라인 (37)에 소켓을 추가 (즉, "socket.sockets.on ( '연결'기능 (클라이언트) {... ')

  7. ==============================

    7.코드로 업데이트 :

    코드로 업데이트 :

    현재로 변경

    마이그레이션 설명서를 참조하십시오

  8. ==============================

    8.@ 알렉스 용액 제조 방법. 당신은 @tyler 언급에 따라 이와 같은 오류가있는 경우 :

    @ 알렉스 용액 제조 방법. 당신은 @tyler 언급에 따라 이와 같은 오류가있는 경우 :

    node.js:134
            throw e; // process.nextTick error, or 'error'
    
    event on first tick ^ Error: Redis connection to 127.0.0.1:6379 failed - ECONNREFUSED, Connection refused at Socket.
    

    당신은 처음 레디 스를 설치해야합니다. 이것 좀 봐:

  9. from https://stackoverflow.com/questions/4441798/how-to-use-redis-publish-subscribe-with-nodejs-to-notify-clients-when-data-value by cc-by-sa and MIT license