baraadark/laravelsocket

此包的最新版本(dev-master)没有可用的许可信息。

BaraaDark Laravel Socket 是一个强大的 Laravel 包,简化了将实时 WebSocket 功能集成到您的 Laravel 项目中。使用此包,您可以在 Laravel 应用程序内轻松创建和管理 Node.js WebSocket 服务器,并利用 Elephant.io 库与 PHP 中的 Socket.io 无缝通信

dev-master 2024-04-21 07:49 UTC

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);

这允许您在发出事件时向客户端发送特定数据。

请随意自定义和扩展此包以满足您应用程序的实时通信需求。