gpt4 book ai didi

php - Laravel 5.5 Redis + Socket.IO 无法工作

转载 作者:可可西里 更新时间:2023-11-01 11:24:47 27 4
gpt4 key购买 nike

我已经处理这个问题好几个小时了,但我想不通。所以我使用的是 Laravel 5.5 而我的 PHP 版本是 7。现在我的项目已经完成,但我想添加用户之间的实时通信。我试图测试一些东西,但它就是行不通。我的本地开发环境在 MAC 上,我正在使用 Laravel Valet 为我的网站提供服务。

我遵循了本教程:Tutorial

首先我安装了Redis & Socket.io如下

$ composer require predis/predis
$ npm install express ioredis socket.io --save

然后我用brew安装了redis server然后启动了

redis-server --port 3001

现在我创建了我的事件 (App\Events\NewUserSignup),如下所示:

<?php

namespace App\Events;

use Illuminate\Broadcasting\Channel;
use Illuminate\Queue\SerializesModels;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;

class NewUserSignup implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;

public $username;

/**
* Create a new event instance.
*
* @return void
*/
public function __construct($username)
{
//
$this->username = $username;
}

/**
* Get the channels the event should broadcast on.
*
* @return \Illuminate\Broadcasting\Channel|array
*/
public function broadcastOn()
{
\Log::info('Event fired');
return new Channel('test-channel');
}
}

然后我在根目录中创建了我的 Socket.js (Root) 文件,如下所示:

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.event, message.data);
});
http.listen(3000, function(){
console.log('Listening on Port 3000');
});

然后我在我的 web.php 文件中添加了两条这样的新路由:

Route::get('/broadcasting/fire', function(){
event(new App\Events\NewUserSignup("james"));
return "Event fired";
});

Route::get('/broadcasting/test', function(){
return view('broadcasting_test');
});

然后我做了如下 View (Resources\views\broadcasting_test):

<meta name="csrf-token" content="{{ csrf_token() }}">

<div class="container">
<h1 id="addition">0</h1>
</div>

<script src="{{ asset('js/jquery.js') }}" type="application/javascript" language="JavaScript"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.4/socket.io.slim.js"></script>
<script>
var socket = io('http://localhost:3000');
socket.on("test-channel:App\\Events\\NewUserSignup", function(message) {
console.log('here');
$('#addition').text(parseInt($('#addition').text()) + parseInt(message.data.addition));
});
</script>

所以我遵循了我应该做的一切。我开始了每一步,甚至使用

启动了套接字服务器
node socket.js

然后我启动了 redis 服务器,但每当我重新启动启动页面时,什么也没有发生!我的终端没有任何变化,根本没有变化。我做错了什么?

最佳答案

你的配置似乎是正确的..我已经尝试过同样的事情并且它确实有效,只是为了确保你在设置你的 BROADCAST_DRIVER= 之后运行了 php artisan config:clear redis 在你的 .env 文件中

关于php - Laravel 5.5 Redis + Socket.IO 无法工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49187415/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com