Soketi 是一款简单、快速且弹性的开源 WebSocket 服务器,用 Typescript 编写。它与 Pusher v7 协议完全兼容,使其成为使用 Laravel Echo 时 Pusher 的可行替代方案。
在本博文中,我们将学习如何将 Soketi 部署到由 Laravel Forge 管理的服务器。我们建议在 Forge 中创建此服务器时使用“Web 服务器”服务器类型,因为 Web 服务器包含 Node、NPM 和 Nginx。
打开端口
创建服务器后,我们需要在服务器上打开端口 6001
,以便 PusherJS / Echo 客户端可以连接到我们稍后将安装的 Soketi 服务器。
要打开端口,请转到 Forge 中的网络面板,创建一个名为“Soketi 服务器”的新规则,并将端口设置为 6001
。规则类型应设置为“允许”。
安装 Soketi
在运行 Soketi 之前,我们需要在服务器上安装它。由于 Soketi 是一个 NPM 包,我们可以运行以下命令来安装它
npm install -g @soketi/soketi
或者,您可以使用 Yarn 安装 Soketi。
我们可以通过在终端中运行 soketi start
来验证 Soketi 是否已安装。如果 Soketi 未安装或其默认端口 6001
正在使用中,那么在执行 start
命令时可能会收到错误。
配置守护进程
安装 Soketi 后,我们可以在服务器上配置一个守护进程,该守护进程将使服务保持运行状态,并在其崩溃时重新启动它。
让我们转到 Forge,然后导航到服务器的 **守护进程** 面板。要创建守护进程,我们需要做几件事
- 将命令设置为
soketi start
- 将停止秒数更改为
60
- 将停止信号更改为
SIGINT
创建完成后,我们可以通过点击“活动守护进程”表中守护进程旁边的三个点,然后点击“显示守护进程日志”按钮来验证 Soketi 是否正在运行。
太好了!Soketi 运行完美。
有关更高级的设置说明,请查看Soketi 文档。您可以修改命令以更改驱动程序、启用 SSL 支持、开启调试等。
配置我们的网站
现在 Soketi 已安装并配置,我们可以更新我们的 Laravel 应用程序以连接到我们的 Soketi 服务器。
默认情况下,config/broadcasting.php
配置文件不包含连接到 Soketi 服务器时所需的额外选项。pusher
配置需要更新
'connections' => [
// ...
'pusher' => [
'driver' => 'pusher',
'key' => env('PUSHER_APP_KEY', 'app-key'),
'secret' => env('PUSHER_APP_SECRET', 'app-secret'),
'app_id' => env('PUSHER_APP_ID', 'app-id'),
'options' => [
'host' => env('PUSHER_HOST', '127.0.0.1'),
'port' => env('PUSHER_PORT', 6001),
'scheme' => env('PUSHER_SCHEME', 'http'),
'encrypted' => true,
'useTLS' => env('PUSHER_SCHEME') === 'https',
],
],
],
我们还需要更新我们的.env
文件,其中包含新的配置详细信息
PUSHER_APP_KEY=app-key
PUSHER_APP_ID=app-id
PUSHER_APP_SECRET=app-secret
PUSHER_HOST=127.0.0.1
PUSHER_PORT=6001
MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
MIX_PUSHER_HOST="${PUSHER_HOST}"
MIX_PUSHER_PORT="${PUSHER_PORT}"
默认情况下,Soketi 使用
app-key
、app-id
和app-secret
凭据启动服务器。您可以使用Soekti 环境变量更改这些凭据。
最后,您应该将PUSHER_HOST
环境变量更改为 Forge 服务器的 IP 地址。您的项目现在应该能够连接到 Soketi 服务器。