文章目录
PHP WebSocket 介绍
WebSocket
是一种网络通信协议,允许在客户端和服务器之间建立持久的全双工连接。这种连接使得服务器能够主动向客户端推送数据,而不仅仅是响应请求。WebSocket
特别适合需要实时数据交互的应用,如聊天应用、在线游戏和实时通知
Laravel 8 中使用 WebSocket实现广播
在 Laravel
中,可以使用多个库来实现 WebSocket
,最常用的是 Ratchet
和 Beyond Code
的 Laravel WebSockets
1. 安装 Laravel WebSockets
使用 beyondcode/laravel-websockets 包
composer require beyondcode/laravel-websockets
2. 配置 WebSocket
安装完包后,需要发布配置文件
php artisan vendor:publish --provider="BeyondCode\LaravelWebSockets\WebSocketsServiceProvider"
这个操作会创建 config/websockets.php
文件,您可以在其中配置 WebSocket
服务器的设置
3.运行 WebSocket 服务器
可以通过 Artisan
命令启动 WebSocket
服务器
php artisan websockets:serve
启动 WebSocket 服务器并在默认端口(6001)上监听
4. 客户端代码
使用 JavaScript 来连接到 WebSocket 服务器
// resources/js/app.js
const socket = new WebSocket('ws://localhost:6001');
socket.onopen = function() {
console.log('WebSocket connection established.');
};
socket.onmessage = function(event) {
console.log('Message from server: ', event.data);
};
socket.onclose = function() {
console.log('WebSocket connection closed.');
};
// 发送消息到服务器
socket.send('Hello, server!');
5. 在 Laravel 中广播事件
在事件中使用 ShouldBroadcast
接口
// app/Events/MessageSent.php
namespace App\Events;
use Illuminate\Broadcasting\Channel;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
class MessageSent implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $user;
public $message;
public function __construct($user, $message)
{
$this->user = $user;
$this->message = $message;
}
public function broadcastOn