带有套接字 io 和 redis 的 laravel echo 服务器
Posted
技术标签:
【中文标题】带有套接字 io 和 redis 的 laravel echo 服务器【英文标题】:laravel echo server with socket io and redis 【发布时间】:2018-02-16 03:09:30 【问题描述】:我尝试使用 laravel-echo 服务器和 socket.io 创建实时应用,但客户端没有变成消息
这是我的代码:
.env
BROADCAST_DRIVER=redis
CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=redis
config/queue.php
'redis' => [
'driver' => 'redis',
'connection' => 'default',
'queue' => 'default',
'retry_after' => 90,
],
config/database.php
'redis' => [
'retry_after' => 90,
'default' => [
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 0,
],
],
routes/channels.php
Broadcast::channel('messages', function()
return true;
);
src/echo.js
import Echo from "laravel-echo"
window.Echo = new Echo(
broadcaster: 'socket.io',
host:'http://localhost:6001'
);
window.Echo.channel('messages')
.listen('.newMessage', (message) =>
debugger;
);
Events/MessagePosted.php
<?php
namespace App\Events;
use Illuminate\Broadcasting\Channel;
use Illuminate\Queue\SerializesModels;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
class MessagePosted implements ShouldBroadcast
use Dispatchable, InteractsWithSockets, SerializesModels;
protected $message;
public function __construct($message)
$this->message = $message;
public function broadcastWith()
return [
'message' => $this->message,
];
public function broadcastAs()
return 'newMessage';
public function broadcastOn()
return new Channel('messages');
MessageController.php
public function post(Request $request)
event(new MessagePosted($request->get('message')));
Redis 服务器已安装,在 redis-cli PING 命令中返回 PONG。 我使用 php artisan queue:work redis,但是从客户端发送消息后,队列中没有显示任何内容... 客户端连接到 laravel-echo-server,它的返回: [14:04:17] - C3c8UUnTn9dvOPc9AAAA 加入频道:消息。 并处理 POST 请求
【问题讨论】:
你搞定了吗? @CatoMinor 是的,我不知道为什么,但是在我创建了新的 laravel 应用程序之后,它终于可以工作了..bitbucket.org/karpalex/student-room 在这里你可以看到使用套接字示例工作的 laravel,不确定其他逻辑,但是 larave + socket io 完美运行 谢谢!也许我也需要创建一个新的 laravel 项目。 :| 【参考方案1】:您正在收听.newMessage
,但改为发送.App.Events.MessagePosted
。
更改 JS 中的监听函数参数:
window.Echo.channel('messages')
.listen('.App.Events.MessagePosted', (message) =>
debugger;
);
【讨论】:
以上是关于带有套接字 io 和 redis 的 laravel echo 服务器的主要内容,如果未能解决你的问题,请参考以下文章
在 redis 订阅事件发生后,如何加入套接字 io 房间?
使用 Redis 扩展 Socket.IO,然后扩展 Redis 本身
带有快速会话的 ReactJS 和 socket.io - 套接字未使用正确的会话并创建了许多其他会话
node.js + socket.io + redis 架构 - 水平服务器缩放套接字连接?