【问题标题】:redis php and javascript connectionredis php和javascript连接
【发布时间】:2015-07-14 23:07:17
【问题描述】:

我正在制作一个网络聊天客户端,我在其中使用 redis 进行发布/订阅。我在订阅部分遇到问题。我可以发布,但我不知道如何订阅。我有一个编写订阅的 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";

?>

【问题讨论】:

  • 或许你可以给我们看看你写了什么?
  • 我展示了我如何调用 php 和 php 文件本身
  • 您查看浏览器控制台是否有 javascript 错误?
  • ypu 没什么问题
  • success 子句中做console.log(response); 怎么样?另外,你能显示完整的 javascript 吗?

标签: javascript php redis


【解决方案1】:

我编写了一个用于订阅的 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 的键用下划线分隔,这与 JavaScript 标准的驼峰命名法不同。

根据 Javascript 库的 Redis 文档,如果我们曾经有一个客户端在 Redis 上侦听或发布信息,我们必须在连接变为将要侦听、订阅或发布信息,不得用于其他用途。

这就是为什么我在redisClient 末尾做这件事duplicate()

差不多就是这样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-12
    • 2012-12-14
    • 2011-06-22
    • 1970-01-01
    相关资源
    最近更新 更多