[REDIS] 레디 스 서브 / 퍼브와 PHP / nodejs
REDIS레디 스 서브 / 퍼브와 PHP / nodejs
MySQL의 DB를 결과를 표시하는 서브 / 퍼브 시스템으로 레디 스를 사용하여 새 프로젝트에 대한 작업을 시작. 업데이트가 있다면 그래서 내 웹 페이지 MySQL에서 해당 업데이트를 게시하고 싶었다. 내 질문은 어떤 옵션을 더 나은 것입니까?
옵션 1: 난 그냥 nodejs와 socket.io를 통해이 모든해야합니까? 레디 스에 연결을 사용하여, 나는 경청 할 필요가 채널을 구독하는 nodejs 스크립트를 만드는 의미 MySQL의에서 nodejs 쿼리 업데이트를 DB, 업데이트가 nodejs를 통해 socket.io에 연결되어있는 HTML에서 다음 MySQL의 행을 게시하는 경우 GET 새로운 데이터 및 프로세스는 결과를 표시하려면?
옵션 2 : PHP 스크립트 쿼리 MySQL과 레디 스 - PHP는 고객과 채널에 대한 업데이트를 게시 적이 있습니까? 그나마 여기에서 설정을 할 다른 무엇을 필요 정확히 알고있다. 나는 아직도이 옵션에 포함 nodejs을해야합니까?
또는 나는 방금 어떻게이 모든 작품을 기반으로 무엇입니까? 결론은 내가 레디 스 서브 / 퍼브 기능을 사용하여 사용자에게 MySQL의 데이터베이스를 통해 결과를 표시 할 수 있습니다.
해결법
-
==============================
1.당신이 PHP에서 MySQL을 업데이트 할 때 당신은 (데이터베이스 돌연변이 때 PHP에서 게시) 명령을 게시 레디 스를 통해 Node.js를에 변경 사항을 게시 할 수 있습니다. Node.js를에서 나는 레디 스의 실시간 덕분에 이러한 변경 구독받을 것입니다. 그럼 난 그냥 socket.io를 통해 관심있는 사용자에게 방송 것입니다. 당신은 예를 들어 MySQL의 채널을 게시 할 수 있습니다. 예를 들어 다음과 같은 SQL 문을 가지고 => INSERT INTO 코멘트 (1, "안녕하세요"). 어디 하나는 사용자 ID 같은 것입니다, 그리고 안녕하세요 세계 주석과 같은 것입니다. 난 아마 그 채널에 SQL 문을 게시하지 것이지만, JSON 대신하는 난 쉽게 자바 스크립트 (JSON.stringify / JSON.parse) 및 PHP (로 json_encode / json_decode)에서 모두 사용할 수 있습니다.
당신이 PHP에서 MySQL을 업데이트 할 때 당신은 (데이터베이스 돌연변이 때 PHP에서 게시) 명령을 게시 레디 스를 통해 Node.js를에 변경 사항을 게시 할 수 있습니다. Node.js를에서 나는 레디 스의 실시간 덕분에 이러한 변경 구독받을 것입니다. 그럼 난 그냥 socket.io를 통해 관심있는 사용자에게 방송 것입니다. 당신은 예를 들어 MySQL의 채널을 게시 할 수 있습니다. 예를 들어 다음과 같은 SQL 문을 가지고 => INSERT INTO 코멘트 (1, "안녕하세요"). 어디 하나는 사용자 ID 같은 것입니다, 그리고 안녕하세요 세계 주석과 같은 것입니다. 난 아마 그 채널에 SQL 문을 게시하지 것이지만, JSON 대신하는 난 쉽게 자바 스크립트 (JSON.stringify / JSON.parse) 및 PHP (로 json_encode / json_decode)에서 모두 사용할 수 있습니다.
이 레디 스의 pubsub 오프 목적을 물리 칠 것 때문에 크론 작업을 실행하지 않습니다. // localhosts : 예를 들어 타고 나는 HTTP에서 블로그는 당신의 웹 사이트를 방문하십시오. 나는 http://localhost.com/a.php에서 기사를 읽어 보시기 바랍니다. 사이트에 아래 내가 그 기사에 댓글을 게시하는 데 사용할 수있는 양식을 제공합니다 :
a.php에
<html> <head> <title>Interesting blog post</title> </head> <body> <div id="article">This is interesting</div> <div id="comments"> <div class="comment"> <div class="from">Alfred Said at 22:34</div> <div class="message">Hello World</div> </div> </div> <form action="post.php" method="post"> <label for="name">Your name</label><br /> <input type="name" id="name" name="name" /><br /> <label for="message">Your Message:</label><br /> <textarea id="message" name="message"></textarea> <input type="submit" /> </form> <script src='jquery.min.js'></script> <script src='http://localhost:8888/socket.io/socket.io.js'></script> <script type="text/javascript"> $(document).ready(function () { var socket = io.connect('http://localhost:8888'); socket.on('message', function (json) { var obj = $.parseJSON(json); alert('in here: ' + obj.name); }); }); </script> </body> </html>
나는 action 속성에 http가 양식을 제출 //localhost/postcomment.php합니다. 그러나 이것은 중요한 부분입니다! post.php에서 당신은 내가 게시 된 데이터를 검색 및 INSERT INTO 코멘트 (1, "안녕하세요")를 사용하여 MySQL을 삽입합니다. 이 돌연변이가 발생하면 당신은 또한 지속적으로 채널 mysql을 듣고있다 Node.js를 과정을 알려야합니다 :
post.php :
<?php $_POST = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING); require("./Predis.php"); $redis = new Predis\Client(); $obj = array( 'name' => $_POST['name'], 'message' => $_POST['message'] ); $json = json_encode($obj); $redis->publish("mysql", $json); echo $json;
post.php는 predis이 필요합니다.
node_redis와 노드 코드는 같을 것이다 :
var redis = require('redis'), subscriber = redis.createClient(), express = require('express'), store = new express.session.MemoryStore(), app = express.createServer( express.bodyParser(), express.static(__dirname + '/public'), express.cookieParser(), express.session({ secret: 'htuayreve', store: store})) sio = require('socket.io'); app.listen(8888, '127.0.0.1', function () { var addr = app.address(); console.log('app listening on http://' + addr.address + ':' + addr.port); }); var io = sio.listen(app); io.configure(function () { io.set('log level', 1); // reduce logging }); io.sockets.on('connection', function (socket) { socket.join('mysql'); socket.on('disconnect', function () { }); }); subscriber.on('message', function (channel, json) { // this will always retrieve messages posted to mysql io.sockets.in('mysql').json.send(json); }); subscriber.subscribe('mysql');
이 샘플은 NPM을 통해 설치할 수 있습니다 다음과 같은 패키지에 따라 달라집니다
npm install socket.io npm install redis npm install express
내가 양식 post.php을 게시 할 때 항상 나는 또한 레디 스에 이러한 변경 사항을 게시 할 수 있습니다. 이 부분은 중요하다! Node.js를 공정은 항상 사람들은 레디 스의 pubsub 덕분에 변화 받고있다. PHP 스크립트 변이가 데이터베이스 게시와 레디 스에 이러한 변경 사항을 게시해야 할 때마다.
P.S : 희망이 분명하다. 어쩌면 나중에 나는 어쩌면 작은 조각과 약간의 시간 사용 가능한 I 업데이트가있을 때 ...
from https://stackoverflow.com/questions/6891342/redis-sub-pub-and-php-nodejs by cc-by-sa and MIT license
'REDIS' 카테고리의 다른 글
[REDIS] 어떻게 후드 SignalR.Redis 작동합니까? (0) | 2020.01.04 |
---|---|
[REDIS] 어떻게에게 Heroku에 Node.js를 사용하여 웹과 노동자 동력계를 전달하는? (0) | 2020.01.04 |
[REDIS] nodejs와 레디 스 노드와 비동기 프로그래밍 패러다임 (0) | 2020.01.04 |
[REDIS] 레디 스 DB와 같은 뭔가가 있지만, RAM의 크기에 제한되지 않는다? [닫은] (0) | 2020.01.04 |
[REDIS] 자바위한 최고의 레디 스 라이브러리 [마감] (0) | 2020.01.04 |