PHPackages                             aston/distribute-ws - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. aston/distribute-ws

ActiveLibrary

aston/distribute-ws
===================

基于redis发布订阅实现的ws分布式通信

v3.0.0(3y ago)11842MITPHP

Since Mar 16Pushed 3y ago1 watchersCompare

[ Source](https://github.com/AstonChenDev/hyperf-distribute-websocket)[ Packagist](https://packagist.org/packages/aston/distribute-ws)[ RSS](/packages/aston-distribute-ws/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (2)Dependencies (7)Versions (3)Used By (0)

Hyperf 分布式 websocket 解决方案
-------------------------

[](#hyperf-分布式-websocket-解决方案)

场景：

1、多个 websocket server 2、客户端 clientA 连接到 serverA 得到 fdA, clientB 连接到 serverB 得到 fdB 3、clientA 想要给 clientB 发送消息

注：fd 类似于当前链接的文件描述符，每一次新的连接会自增 1 ，可以理解为连接号

问题：clientA 和 clientB 连接到的是不同的服务器，fd 作用域仅限于当前服务器，要想跨服务器想实现通讯，需要借助中间件来传递消息

环境：

php &gt;=7.2 hyperf &gt;= 2.2

### 理论参考

[](#理论参考)

[Hyperf搭建websocket集群项目（通过redis发布订阅）](https://learnku.com/articles/69165)

安装
--

[](#安装)

使用 composer

```
composer require aston/distribute-ws

```

发布配置文件

```
php bin/hyperf.php vendor:publish aston/distribute-ws

```

配置文件说明
------

[](#配置文件说明)

```
[
    'user_relate_fd_key' => 'user:relate:fd:%s',//用户ID与分布式FD关联key
    'fd_relate_user_key' => 'fd:relate:user:%s',//分布式FD与用户ID关联key
    'ttl' => 7200,//key的过期时间
    'default_opcode' => WEBSOCKET_OPCODE_BINARY,//默认消息类型 发送时也可传参指定,
    'driver' => QueueDriver::class,// 可选择 Aston\DistributeWs\Driver\QueueDriver::class 异步队列 |  Aston\DistributeWs\Driver\SubscribeDriver::class 发布订阅
    'queue_config' => [
        'process_num' => env('LOCAL_PUSH_PROCESS_NUM', 1),//消费队列进程数量
        'process_concurrent_limit' => env('LOCAL_PUSH_PROCESS_CONCURRENT_LIMIT', 10)//消费队列同时处理消息数
    ],
    'server_id' => env('DISTRIBUTE_SERVER_ID', uniqid()),//服务器ID，分布式部署时保证每台服务器的SERVER_ID不同即可
]
```

使用方法演示
------

[](#使用方法演示)

[根据hyperf官方文档搭建好websocket服务器](https://hyperf.wiki/2.2/#/zh-cn/websocket-server)

在控制器中注入本服务

```
