WebSocket 允许双向通信:服务器可以向浏览器发送消息,而浏览器(客户端)可以通过相同的连接进行响应。
我正在使用以下方法在 Laravel 6 中实现聊天应用程序:
- Laravel Echo JavaScript 包(不是 laravel-echo-server),
- Laravel 网络套接字
- 推送器-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"
- 设置广播驱动程序以
pusher
在.env
文件中使用。
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
但指向Laravel Echo JavaScript package
本地Laravel WebSockets server
,在步骤 6 中配置。
请不要Laravel Echo JavaScript package
与laravel-echo-server
of混淆Socket.IO Server
。我没有使用Socket.IO Server
.
现在,我不想像第 8 步那样在服务器端触发事件,而是想从客户端触发事件,因为 WebSocket 允许双向通信。我怎么能用 , 做到Laravel
这Laravel Echo JavaScript Package
一点Laravel WebSockets PHP package
?