【发布时间】:2020-05-02 07:47:11
【问题描述】:
WebSocket 允许双向通信:服务器可以向浏览器发送消息,而浏览器(客户端)可以通过同一连接进行响应。
我正在使用 Laravel 6 实现聊天应用程序:
- Laravel Echo JavaScript Package(不是 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,但将 Laravel Echo JavaScript package 指向本地 Laravel WebSockets server,在步骤 6 中配置。
请不要将Laravel Echo JavaScript package 与laravel-echo-server 或Socket.IO Server 混淆。我没有使用Socket.IO Server。
现在我不想像第 8 步那样在服务器端触发事件,而是想从客户端触发事件,因为 WebSocket 允许双向通信。我如何在Laravel 和Laravel Echo JavaScript Package、Laravel WebSockets PHP package 中做到这一点?
【问题讨论】:
-
请您链接到您使用的确切包(Laravel Echo JavaScript 包、Laravel WebSockets 和 pusher-js)。
-
链接到 Laravel Echo JavaScript 包:github.com/laravel/echo
-
链接到 Laravel WebSockets:docs.beyondco.de/laravel-websockets
-
链接到 pusher-js NPM 包:npmjs.com/package/pusher-js
-
谢谢。出于某种原因,我认为您的意思是完全不同的 Laravel echo 包。
标签: javascript php laravel websocket laravel-websockets