WebSocket可以进行双向通信:服务器可以向浏览器发送消息,浏览器(客户端)可以通过同一连接回复。
我正在使用以下工具在Laravel 6中实现聊天应用:
- Laravel Echo JavaScript包(不是Laravel-echo-server)
- Laravel WebSockets
- pusher-js
我已经让服务器触发事件并让客户端监听这些事件,如下所示:
- 安装Laravel WebSockets包。
composer require beyondcode/laravel-websockets
- 配置
config/broadcasting.php
。
'pusher' => [
'driver' => 'pusher',
'key' => xxx,
'secret' => xxx,
'app_id' => xxx,
'options' => [
'cluster' => xxx,
'encrypted' => true,
'useTLS' => true,
'host' => '127.0.0.1',
'port' => 6001,
'scheme' => 'https',
],
],
]
- 配置
config/websockets.php
'apps' => [
[
'id' => xxx,
'name' => xxx,
'key' => xxx,
'secret' => xxx,
'enable_client_messages' => true,
'enable_statistics' => true,
],
],
- 安装
Pusher
服务器。
composer require pusher/pusher-php-server "~3.0"
- 在
.env
文件中将广播驱动程序设置为使用pusher
。
BROADCAST_DRIVER=pusher
- 在客户端使用
laravel-echo
和pusher-js
。
import Echo from "laravel-echo"
window.Pusher = require('pusher-js');
window.Echo = new Echo({
broadcaster: 'pusher',
key: 'your-pusher-key',
wsHost: window.location.hostname,
wsPort: 6001,
disableStats: true,
});
- 启动WebSockets服务器。
php artisan websockets:serve
- 在服务端,使用实现了
ShouldBroadcastNow
类的事件类来触发事件。
event(new MyEventClass((object)$message));
一切正常。在步骤8中,我从服务器端触发事件。
请注意,我没有使用官方的Pusher服务器,而是利用了Pusher API实现和pusher-js
,但将指向配置在步骤6中的本地Laravel WebSockets服务器。
请不要将与laravel-echo-server
或Socket.IO Server
混淆。我没有使用Socket.IO Server
。
现在,我想从客户端触发事件,因为WebSocket允许双向通信。如何在Laravel
中使用Laravel Echo JavaScript Package
和Laravel WebSockets PHP package
实现呢?