baraadark / laravelsocket
BaraaDark Laravel Socket 是一个强大的 Laravel 包,简化了将实时 WebSocket 功能集成到您的 Laravel 项目中。使用此包,您可以在 Laravel 应用程序内轻松创建和管理 Node.js WebSocket 服务器,并利用 Elephant.io 库与 PHP 中的 Socket.io 无缝通信
Requires
- elephantio/elephant.io: ^4.2
This package is not auto-updated.
Last update: 2024-09-22 09:54:05 UTC
README
BaraaDark Laravel Socket 是一个强大的 Laravel 包,简化了将实时 WebSocket 功能集成到您的 Laravel 项目中。使用此包,您可以在 Laravel 应用程序内轻松创建和管理 Node.js WebSocket 服务器,并利用 Elephant.io 库与 PHP 中的 Socket.io 无缝通信
BaraaDark/LaravelSocket 包
安装
您可以使用 Composer 安装 LaravelSocket 包,运行以下命令:
composer require baraadark/laravelsocket:dev-master
安装完成后,通过运行以下命令配置服务器设置:
php artisan socket:config
输入 Socket 事件监听的地址和端口。
接下来,通过运行以下命令初始化 Node.js 服务器:
php artisan socket:init
这将设置必要的 Node.js 依赖项。
定义 Socket.IO 事件 要定义 Socket.IO 事件,您需要通过运行以下命令发布 events.php 路由文件:
php artisan vendor:publish --tag=socket-route
编辑 events.php 文件,并定义您的事件逻辑作为 Laravel 路由。您在此处定义的每个路由将对应两个 Socket.IO 事件
一个用于获取数据的 'fetch' 事件。一个用于加载数据的 'load' 事件。事件名称将与路由名称匹配,前面加上 'fetch/' 或 'load/'。例如
Route::get('students/index', [SocketController::class, 'index']);
'fetch/students/index' 事件用于获取数据。'load/students/index' 事件用于加载数据。请确保您的路由操作使用 response()->json() 方法返回 JSON 数据,因为这是 Socket.IO 通信所需的。示例
return response()->json([ 'data' => $your_data, // ... other JSON data ]);
更新 Socket.IO 事件 要根据您的路由更新您的 Socket.IO 事件,运行以下命令:
php artisan socket:events
此命令将生成处理 Socket.IO 事件所需的必要 JavaScript 代码。
使用 LaravelSocket Facade 您可以使用 LaravelSocket Facade 对象在代码的任何位置发出事件。例如,您可以在观察者中发出事件
use BaraaDark\LaravelSocket\Facades\LaravelSocket; class StudentObserver { // ... private function reloadData(): void { LaravelSocket::emit('students/index'); } public function created(Student $student): void { self::reloadData(); } // ... public function forceDeleted(Student $student): void { self::reloadData(); } }
您还可以向 emit 函数传递数据
LaravelSocket::emit('your/route/endpoint', $yourDataAsArray);
这允许您在发出事件时向客户端发送特定数据。
请随意自定义和扩展此包以满足您应用程序的实时通信需求。