redis php和javascript连接

时间:2015-07-14 23:07:17

标签: javascript php redis

我正在建立一个网络聊天客户端,我将redis用于pub / sub。我在订阅部分遇到问题。我可以发布,但我不知道如何订阅。我有一个写入订阅的PHP脚本(它在我运行php时工作)它监听并回显消息。我希望能够在javascript中获取该消息。我如何调用php文件并收听?我在jquery中尝试了ajax并在成功函数中侦听echo,但它似乎不起作用。我是新手,任何建议都很有帮助

编辑:这是javascript

$.ajax({
url:"http://localhost/redisphp.php",
type: GET,
success: function(response){ ...},
...

这是redis。我模仿了这个链接https://xmeng.wordpress.com/2011/11/14/pubsub-in-redis-using-php/

<?php
function f($redis, $chan, $msg) {
switch($chan) {
    case 'chan-1':
        echo $msg;
}
}

ini_set('default_socket_timeout', -1);

$redis = new Redis();
$redis->pconnect('128.0.0.0',6378);

$redis->subscribe(array('chan-1'), 'f');
print "\n";

?>

1 个答案:

答案 0 :(得分:0)

我写了一个订阅的php脚本(运行php时起作用),它侦听并回显消息。我希望能够在javascript中获得该消息。

听起来您需要创建一个Express API来连接到Redis服务器。

请记住,我所提供的信息非常有限。因此,使用Express API的第一件事就是创建package.json文件,如下所示:

{
  "dependencies": {
    "express": "4.16.3",
    "redis": "2.8.0",
    "nodemon": "1.18.3"
  },
  "scripts": {
    "dev": "nodemon",
    "start": "node index.js"
  }
}

您当然不希望它看起来像这样,而只是将您指向要执行的操作的右边。当然,您将需要针对这些特定依赖项执行npm install

然后,如果我是您,我将像这样创建一个server/keys.js文件:

module.exports = {
  redisHost: process.env.REDIS_HOST,
  redisPort: process.env.REDIS_PORT,
};

然后要求在server/index.js文件中添加以下内容:

const keys = require("./keys");

// Express App Setup
const express = require("express");

const app = express();

// Redis Client Setup
const redis = require(‘redis’);
const redisClient = redis.createClient({
    host: keys.redisHost,
    port: keys.redisPort,
    retry_strategy: () => 1000
});
const redisPublisher = redisClient.duplicate();

因此,这个retry_strategy具有箭头功能,这意味着如果我们失去与Redis服务器的连接,请尝试每秒重新连接一次。

retry_strategy的键由下划线分隔,与camelCase的JavaScript标准相反。

根据Javascript库的Redis文档,如果我们曾经有一个客户端正在侦听或发布有关Redis的信息,则必须在连接转换成要侦听,订阅或连接的连接之间进行重复连接。发布信息,不能将其用于其他目的。

这就是为什么我在duplicate()的结尾处执行此redisClient的原因。

这差不多。