我正在建立一个网络聊天客户端,我将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";
?>
答案 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
的原因。
这差不多。