搭建基于 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 协议》,转载必须注明作者和本文链接
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 23

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

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

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

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

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

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

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

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

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

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

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

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

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

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!