搭建基于 Soketi 的 WebSockets 高性能服务(Laravel 广播组件零侵入免费使用)

因项目需求核心功能对 WebSocket 高度依赖,所以调研了 Larave 支持比较好的驱动,Laravel 官方推荐了 Pusher、Ably 以及开源的 laravel-websockets 和 Soketi,前 2 个集成起来非常简单,但是考虑网络延迟的原因放弃了。

最终选择了 Soketi 提供 WebSocket 服务,主要原因还是考虑到性能(还没有做压力测试),而且还完全兼容 Pusher v7 协议,官网介绍:

Soketi is your simple, fast, and resilient open-source WebSockets server

在阿里云上配置了一个对外的服务,在开发过程中如果想做测试可以直接使用,我之前都是用 Pusher 做的测试,有时候网络延时的确很高,一点不稳定。

首先就是要安装 composer require pusher/pusher-php-server 来支持推送。

具体的配置信息和 pusher 稍有不同,主要就是自定义了 host 和 port 到自定义的服务器,其他都是一样的。

env 文件#

BROADCAST_DRIVER=pusher
PUSHER_APP_ID=532232132
PUSHER_APP_KEY=DZIqMLJdGi633kB3BYHN
PUSHER_APP_SECRET=pelvQlQFJecoYWvVUbF8
PUSHER_APP_CLUSTER=ap3
PUSHER_HOST=pusher.qiyuankeji.cn
PUSHER_PORT=6002
MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
MIX_PUSHER_HOST="${PUSHER_HOST}"
MIX_PUSHER_PORT="${PUSHER_PORT}"

config/broadcasting.php#

'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', 'https'),
        'encrypted' => true,
         'useTLS' => env('PUSHER_SCHEME') === 'https',
        ],
    ],

resources/js/bootstrap.js#

import Echo from 'laravel-echo';

window.Pusher = require('pusher-js');

window.Echo = new Echo({
  broadcaster: 'pusher',
  key: process.env.MIX_PUSHER_APP_KEY,
  wsHost: process.env.MIX_PUSHER_HOST,
  wsPort: process.env.MIX_PUSHER_PORT,
  wssPort: process.env.MIX_PUSHER_PORT,
  forceTLS: false,
  encrypted: true,
  disableStats: true,
  enabledTransports: ['ws', 'wss'],
});

配置好这些就可以直接使用 Echo 来监听广播了,争取一直稳定的运行下去,后续做个免费申请独立秘钥的接口,就可以玩起来了。

PUSHER_APP_ID=532232132  
PUSHER_APP_KEY=DZIqMLJdGi633kB3BYHN 
PUSHER_APP_SECRET=pelvQlQFJecoYWvVUbF8
PUSHER_HOST=pusher.qiyuankeji.cn
PUSHER_PORT=6002

ps: 如果使用授权频道,记得在 app.php 中将 BroadcastServiceProvider 前的注释取消掉。

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 23

这么说,可以放弃 laravel-websockets 了?

3年前 评论
24K大白羊 (楼主) 3年前
91it (作者) 3年前
24K大白羊 (楼主) 3年前
还不出来 2年前
24K大白羊 (楼主) 2年前

laravel-websockets 不推荐,对 Laravel 侵入太强了。

3年前 评论
24K大白羊 (楼主) 3年前

file 是不是受俄乌冲突影响?中国大陆 ip 被封了,官方文档访问不了

3年前 评论
还不出来 3年前
24K大白羊 (楼主) 3年前

我以为是 Soketi 使用教程,结果……

3年前 评论
24K大白羊 (楼主) 3年前

WebSocket 高度依赖的项目,为何不直接选择 workerman 呢

3年前 评论
24K大白羊 (楼主) 3年前

首先就是要安装 composer require pusher/pusher-php-server 来支持推送。

楼主你确定你安装的是 Soketi 吗?

2年前 评论
24K大白羊 (楼主) 2年前
levi (作者) 2年前