Laravel 5.1使用redis

时间:2015-07-08 20:02:41

标签: php node.js redis laravel-5

这是我的Routes.php

Route::get('hello1',function(){
    Redis::publish('test-channel', json_encode(['foo' => 'bar']));
});

这是我的app.js

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var Redis = require('ioredis');
var redis = new Redis();


app.get('/', function(req, res){
    res.sendFile(__dirname + '/index.html');
});


redis.subscribe('test-channel', function () {
    console.log('Redis: test-channel subscribed');
});

redis.on('message', function(channel, message) {
    console.log('Redis: Message on ' + channel + ' received!');
    console.log(message);
    message = JSON.parse(message);
    io.emit(channel, message.payload)
});

io.on('connection', function(socket){
    console.log('a user connected');
    socket.on('disconnect', function(){
        console.log('user disconnected');
    });
});


http.listen(6379, function(){
    console.log('listening on *:6379');
});

我的index.html

<!doctype html>
<html>
<head>
    <title>Socket.IO</title>
</head>
<body>
<ul id="messages">
    <li>Hardcoded Message</li>
</ul>

<script src="/socket.io/socket.io.js"></script>
<script src="http://code.jquery.com/jquery-1.11.1.js"></script>
<script>
    var socket = io();
    socket.on("test-channel", function(message) {
        console.log(message);
        $('#messages').append($('<li>').text(message));
    });
</script>
</body>
</html>

现在每当运行php artisan redis:subscribe或hello1 route我都会收到错误,

  

AbstractConnection.php第146行中的ConnectionException:同时出错   从服务器读取行。 [TCP://本地主机:6379]

1 个答案:

答案 0 :(得分:2)

默认情况下,Redis正在侦听端口6379,并且您已将http服务器设置为侦听同一端口。这不起作用,在尝试运行节点应用程序时是否收到错误?如果你没有收到错误,redis很可能根本没有运行或正在侦听另一个端口。

如果您的redis实例正在侦听另一个端口,laravel将尝试连接到端口6379上的redis并且将在节点服务器上命中,因此无法连接到redis,因为没有redis但是节点http服务器正在侦听在这个港口。

如果您的redis实例正在侦听另一个端口并且您在laravel配置中更改了此项,则必须通过传递端口来更改将ioredis连接到redis的方式:

例如

var redis = new Redis(6380) 

有关将ioredis连接到redis的更多详细信息,请参阅github page

作为结论,请确保

  1. Redis正在运行
  2. 您的http服务器正在侦听除redis
  3. 之外的其他端口
  4. 您的config / database.php和config / broadcast.php(laravel)中redis的连接设置以及server.js文件中的节点的连接设置是否正确
  5. 请注意 http服务器连接到redis,ioredis是。