Php Laravel 5.1与redis合作

Php Laravel 5.1与redis合作,php,node.js,redis,laravel-5,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 Redi

这是我的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');
});
my 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>

Socket.IO
  • 硬编码报文
var socket=io(); socket.on(“测试通道”,功能(消息){ 控制台日志(消息); $(“#消息”).append($(“
  • ”).text(消息)); });
  • 现在,无论何时运行php artisan redis:subscribe或hello1 route,我都会遇到如下错误:

    AbstractConnection.php第146行中的ConnectionException:错误 正在从服务器读取行。[tcp://localhost:6379]


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

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

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

    比如说

    var redis = new Redis(6380) 
    
    有关将ioredis连接到redis的更多详细信息,请参阅

    作为结论,请确保

  • Redis正在运行
  • 您的http服务器正在侦听redis以外的其他端口
  • config/database.php和config/broadcast.php(laravel)中的redis以及server.js文件中的节点的连接设置是正确的

  • 请注意,http服务器正在连接redis,ioredis正在连接。

    谢谢Michael先生。安装redis服务器并通过dos模式启动,一切正常。但每当我试图通过node js启动redis服务器时,我得到的所有错误都是events.js:85 thrower;//未处理的“error”事件^error:Redis与127.0.0.1:6379的连接失败-在RedisClient上读取EconReset。在出现错误时,我无法理解为什么欢迎您!在从节点启动连接之前,需要运行Redis。节点不会使用您拥有的代码启动它。关于如何正确设置redis,这里有一个很好的解释,但我担心我现在如何在real live server上设置这些对我来说很简单,因为我在windows上使用CLI模式并打开redis服务器的端口:)无论如何,谢谢你michael你为我节省了很多时间1000谢谢你,先生