栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Redis Sub / pub和php / nodejs

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Redis Sub / pub和php / nodejs

选项3

从PHP更新MySQL时,您将通过redis

publish
命令将这些更改发布到node.js
(在数据库突变时从PHP发布)。由于Redis的订阅,我可以从node.js实时收到这些更改。然后,我将它们通过socket.io广播给感兴趣的用户。例如
publish
,您可以引导
mysql
。例如,下面的SQL语句=>
INSERT INTO comments (1, "Hello World")
。哪里
1
有userid之
HelloWorld
类的东西,也可能有注释之类的东西。我可能不会将SQL语句发布到该通道,但是可以使用JSON代替,可以从Javascript(JSON.stringify
/ JSON.parse)和PHP(json_enpre / json_depre)轻松使用。

更新资料

您不会执行cron-job,因为这会破坏Redis
pubpub的目的。以我访问您的网站为例,该网站是的博客

http://localhosts
。我在阅读了一篇文章
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 > <div >Alfred Said at 22:34</div> <div >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
检索我发布的数据时,使用将其插入MySQL
INSERT INTO comments (1, "HelloWorld")
。当发生这种突变时,您还需要通知不断监听channel的node.js进程
mysql

post.php:

<?php$_POST  = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);require("./Predis.php");$redis = new PredisClient();$obj = array(    'name'      => $_POST['name'],    'message'   => $_POST['message']);$json = json_enpre($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.ionpm install redisnpm install express

总是在我发布表单时

post.php
,还将这些更改发布到redis。这部分很重要!由于Redis的pubsub,node.js进程始终收到这些更改。每次当php脚本使数据库发生突变时,都应使用将该更改发布到Redis
publish

PS:希望这很清楚。 也许稍后,当我有空的时候,我可能会更新一些代码段…



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/403916.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号