0

我已经在 laravel 5.2 中安装了 node.js、socket.io、predis、ioredis

当我跑步时

节点socket.js

在 gitbash 中,没有返回任何内容。

在 localhost:3000,首先加载一段时间,然后显示 localhost没有发送任何数据错误。(应该显示完成)

socket.js 文件:http ://laravel.io/bin/OeGxv

路线文件: http: //laravel.io/bin/d9PvY

package.json: http: //laravel.io/bin/Kk5mB

4

1 回答 1

0

我不认为可以帮助你,但我成功地将 redis 与 Laravel 5.1 一起使用,这是代码。

作曲家.json

    "require": {
    "php": ">=5.5.9",
    "laravel/framework": "5.1.*",
    "pusher/pusher-php-server": "^2.2",
    "predis/predis": "^1.1"

路由.php

Route::get('/setredis',[
   'as'=>'set.redis',
    'uses'=>'TestController@index'
]);

Route::get('/getredis',[
    'as'=>'get.redis',
    'uses'=>'TestController@create'
]);

Route::get('fire', function () {
    // this fires the event
    event(new \App\Events\EventName());
    return "event fired";
});

Route::get('test', function () {
    // this checks for the event
    return view('test');
});

测试控制器.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;
use Redis;

class TestController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        Redis::set('name', 'Taylor');
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        $user = Redis::get('name');
        echo $user;
    }

test.blade.php

@extends('master')

@section('content')
    <p id="power">0</p>
@stop

@section('footer')
    <script src="https://cdn.socket.io/socket.io-1.4.5.js"></script>
    <script>
        var socket = io('http://testlaravel5.com:3000');
        socket.on("test-channel", function(message){
            console.log(message);
            // increase the power everytime we load test route
            $('#power').text(parseInt($('#power').text()) + parseInt(message.data.power));
        });
    </script>
@stop

socket.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();
redis.subscribe('test-channel', function(err, count) {
});
redis.on('message', function(channel, message) {
    console.log('Message Recieved: ' + message);
    message = JSON.parse(message);
    io.emit(channel, message.data);
});
http.listen(3000, function(){
    console.log('Listening on Port 3000');
});

事件名称.php

<?php

namespace App\Events;

use App\Events\Event;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;

class EventName extends Event implements ShouldBroadcast
{
    use SerializesModels;
    public $data;
    /**
     * Create a new event instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->data = array(
            'power'=> '10'
        );
    }

    /**
     * Get the channels the event should be broadcast on.
     *
     * @return array
     */
    public function broadcastOn()
    {
        return ['test-channel'];
    }
}

希望能帮到你!

于 2016-07-29T04:55:54.807 回答