PHPackages                             sukerd/swoft-websocket-beautify - 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. sukerd/swoft-websocket-beautify

ActiveLibrary

sukerd/swoft-websocket-beautify
===============================

swoft/websocket-server 的补充与封装

291PHP

Since Dec 24Pushed 6y ago1 watchersCompare

[ Source](https://github.com/SuKerd/WebSocketBeautify)[ Packagist](https://packagist.org/packages/sukerd/swoft-websocket-beautify)[ RSS](/packages/sukerd-swoft-websocket-beautify/feed)WikiDiscussions master Synced today

READMEChangelogDependenciesVersions (1)Used By (0)

SwoftWebSocketBeautify
======================

[](#swoftwebsocketbeautify)

目录
--

[](#目录)

1. [概述](#1-%E6%A6%82%E8%BF%B0)
2. [环境需求](#2-%E7%8E%AF%E5%A2%83%E9%9C%80%E6%B1%82)
3. [安装](#3-%E5%AE%89%E8%A3%85)
4. [使用](#4-%E4%BD%BF%E7%94%A8)
    4.1. [将fd与uid绑定](#41-%E5%B0%86fd%E4%B8%8Euid%E7%BB%91%E5%AE%9A)
    4.2. [按uid解绑](#42-%E6%8C%89uid%E8%A7%A3%E7%BB%91)
    4.3. [按fd解绑](#43-%E6%8C%89fd%E8%A7%A3%E7%BB%91)
    4.4. [判断fd是否在线](#44-%E5%88%A4%E6%96%ADfd%E6%98%AF%E5%90%A6%E5%9C%A8%E7%BA%BF)
    4.5. [获取当前uid全部所在线连接数量](#45-%E8%8E%B7%E5%8F%96%E5%BD%93%E5%89%8Duid%E5%85%A8%E9%83%A8%E6%89%80%E5%9C%A8%E7%BA%BF%E8%BF%9E%E6%8E%A5%E6%95%B0%E9%87%8F)
    4.6. [向uid绑定的所有在线fd发送数据](#46-%E5%90%91uid%E7%BB%91%E5%AE%9A%E7%9A%84%E6%89%80%E6%9C%89%E5%9C%A8%E7%BA%BFfd%E5%8F%91%E9%80%81%E6%95%B0%E6%8D%AE)
    4.7. [发送给某个fd客户端](#47-%E5%8F%91%E9%80%81%E7%BB%99%E6%9F%90%E4%B8%AAfd%E5%AE%A2%E6%88%B7%E7%AB%AF)
    4.8. [按uid获取fd](#48-%E6%8C%89uid%E8%8E%B7%E5%8F%96fd)
    4.9. [获取全局所有uid-fd列表](#49-%E8%8E%B7%E5%8F%96%E5%85%A8%E5%B1%80%E6%89%80%E6%9C%89uid-fd%E5%88%97%E8%A1%A8)
    4.10. [按fd获取uid](#410-%E6%8C%89fd%E8%8E%B7%E5%8F%96uid)
    4.11. [获取全局所有fd-uid列表](#411-%E8%8E%B7%E5%8F%96%E5%85%A8%E5%B1%80%E6%89%80%E6%9C%89fd-uid%E5%88%97%E8%A1%A8)

1. 概述
-----

[](#1-概述)

- swoft/websocket-server 的补充与封装，因业务需要封装了一下，后来觉得可以抽离并开源出来为swoft生态贡献我卑微的一点力量:grimacing:（极其简单，大佬勿喷）
    （在此感谢swoft框架作者[@stelin](https://github.com/stelin "@stelin")提供如此优秀的框架，也感谢workerman框架作者[@walkor](https://github.com/walkor "@walkor")提供的思路）
- 使用Redis hash实现的进程间共享内存 （为什么不用swoole table？因为无法动态扩容，与需求相驳）
- 现目前为开发测试版本，正待上线测试，但就目前测试结果来说并无问题
- 如有更好解决方案，烦请大佬指点

2. 环境需求
-------

[](#2-环境需求)

######  2.1. 必须swoft

[](#21-必须swoft)

######  2.2. swoft必须&gt;2.0

[](#22-swoft必须20)

######  2.3. 最不可少swoft/websocket-server

[](#23-最不可少swoftwebsocket-server)

3. 安装
-----

[](#3-安装)

> composer require sukerd/swoft-websocket-beautify:dev-master

4. 使用
-----

[](#4-使用)

####  说明

[](#说明)

> **下文不再做解释**

 **$uid** 这里uid泛指用户id或者设备id，用来唯一确定一个客户端用户或者设备

 **$fd** 是与客户端的连接 ID，它表明了不同的客户端

 如果想实现分组啥的还请自行实现，因为我目前的业务暂时用不到（其实也挺简单:grimacing:），后续有需求了再说吧 :joy:

---

#####  4.1. 将fd与uid绑定

[](#41-将fd与uid绑定)

 `public static function bindUid(string $uid, int $fd = 0): bool`

######  参数说明：

[](#参数说明)

 **$uid** string 需要绑定的uid

 **$fd** int 需要绑定的fd *（非必须，默认为本次连接fd）*

######  方法说明：

[](#方法说明)

 1. uid与fd是一对多的关系，允许一个uid下有多个fd。
 2. 一个fd只能绑定一个uid，如果绑定多次uid，则只有最后一次绑定有效。
 3. 如果业务需要一对一的关系，Beautify::getFd($uid)获得某uid已经绑定的所有fd，然后调用 Session::mustGet()-&gt;getServer()-&gt;disconnect($fd)踢掉之前的fd
 4. **因为使用Redis hash实现的进程间共享内存，如果服务端产生异常（如：stop、restart、等等）会导致之前产生的绑定数据依然留存于缓存中，但是不用担心程序重启后数据冲突的问题，一旦fd重新上线并进行绑定，Beautify会自己处理因意外原因遗留被绑定的uid、fd并解绑**

######  示例：

[](#示例)

 `Beautify::bindUid('10000');`

---

#####  4.2. 按uid解绑

[](#42-按uid解绑)

 `public static function unbindUid(string $uid, int $fd = 0): void`

######  参数说明：

[](#参数说明-1)

 **$uid** string

 **$fd** int 非必须，指定解绑某个fd，如果默认则解绑全部

######  示例：

[](#示例-1)

 `Beautify::unbindUid('10000', 1);`

---

#####  4.3. 按fd解绑

[](#43-按fd解绑)

 `public static function unbindFd(int $fd): void`

######  参数说明：

[](#参数说明-2)

 **$fd** int

######  方法说明：

[](#方法说明-1)

 **fd下线（连接断开）时不会自动执行解绑，开发者必需调用Beautify::unbindFd($fd)解绑。**

######  示例：

[](#示例-2)

 `Beautify::unbindFd(1);`

---

#####  4.4. 判断fd是否在线

[](#44-判断fd是否在线)

 ` public static function isOnline(int $fd): bool`

######  参数说明：

[](#参数说明-3)

 **$fd** int

######  方法说明：

[](#方法说明-2)

 1.检查连接是否为有效的WebSocket客户端连接
 2.如果是客户端断网断电等极端情况掉线，服务端就无法得知连接已经断开，需自己实现心跳检测\*[（如果不知道请自行面向百度编程）](https://www.baidu.com/s?wd=websoket%E5%BF%83%E8%B7%B3%E6%A3%80%E6%B5%8B "（如果不知道请自行面向百度编程）")\*

######  示例：

[](#示例-3)

 `Beautify::isOnline(1);`

---

#####  4.5. 获取当前uid全部所在线连接数量

[](#45-获取当前uid全部所在线连接数量)

 `public static function isUidOnline(string $uid): int`

######  参数说明：

[](#参数说明-4)

 **$uid** string

######  方法说明：

[](#方法说明-3)

 1.检查uid被绑定的fd连接是否为有效的WebSocket客户端连接并返回**有效连接数**
 2.如果是客户端断网断电等极端情况掉线，服务端就无法得知连接已经断开，需自己实现心跳检测\*[（如果不知道请自行面向百度编程）](https://www.baidu.com/s?wd=websoket%E5%BF%83%E8%B7%B3%E6%A3%80%E6%B5%8B "（如果不知道请自行面向百度编程）")\*

######  示例：

[](#示例-4)

 `Beautify::isUidOnline('10000');`

---

#####  4.6. 向uid绑定的所有在线fd发送数据

[](#46-向uid绑定的所有在线fd发送数据)

 `public static function sendToUid(string $uid, string $data): int`

######  参数说明：

[](#参数说明-5)

 **$uid** string
 **$data** string

######  方法说明：

[](#方法说明-4)

 默认uid与fd是一对多的关系，如果当前uid下绑定了多个fd，则多个fd对应的客户端都会收到消息

######  示例：

[](#示例-5)

 `Beautify::sendToUid('10000', 'hi, swoft!');`

---

#####  4.7. 发送给某个fd客户端

[](#47-发送给某个fd客户端)

 `public static function sendToFd(int $fd, string $data): bool`

######  参数说明：

[](#参数说明-6)

 **$fd** int
 **$data** string

######  示例：

[](#示例-6)

 `Beautify::sendToFd(1, 'hi, swoft!');`

---

#####  4.8. 按uid获取fd

[](#48-按uid获取fd)

 ` public static function getFd(string $uid): array`

######  参数说明：

[](#参数说明-7)

 **$uid** string

######  方法说明：

[](#方法说明-5)

 按uid获取与之绑定的fd

######  示例：

[](#示例-7)

 ` vdump(Beautify::getFd('10000')); // [1,2,3]`

---

#####  4.9. 获取全局所有uid-fd列表

[](#49-获取全局所有uid-fd列表)

 `public static function getAllUidFd(): array`

######  方法说明：

[](#方法说明-6)

 获取全局所有uid-fd列表

######  示例：

[](#示例-8)

 ` vdump(Beautify::getAllUidFd()); // ['10000'=>'1,2,3' ,'10001'=>'4']`

---

#####  4.10. 按fd获取uid

[](#410-按fd获取uid)

 `public static function getUid(string $fd): string`

######  参数说明：

[](#参数说明-8)

 **$fd** string

######  方法说明：

[](#方法说明-7)

 按fd获取与之绑定的uid

######  示例：

[](#示例-9)

 ` vdump(Beautify::getFd('10000')); // [1,2,3]`

---

#####  4.11. 获取全局所有fd-uid列表

[](#411-获取全局所有fd-uid列表)

 `public static function getAllFdUid(): array`

######  方法说明：

[](#方法说明-8)

 获取全局所有fd-uid列表

######  示例：

[](#示例-10)

 ` vdump(Beautify::getAllFdUid()); // [1 => '10000', 2 => '10000', 3 => '10000', 4 => '10001']`

###  Health Score

19

—

LowBetter than 10% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity8

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity35

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://www.gravatar.com/avatar/5ffa50e58c9a21827bfa6c854800ec1dc55f93bee9e7d0f3a090336a9ed856ee?d=identicon)[SuKerd](/maintainers/SuKerd)

---

Top Contributors

[![SuKerd](https://avatars.githubusercontent.com/u/50944738?v=4)](https://github.com/SuKerd "SuKerd (27 commits)")

### Embed Badge

![Health badge](/badges/sukerd-swoft-websocket-beautify/health.svg)

```
[![Health](https://phpackages.com/badges/sukerd-swoft-websocket-beautify/health.svg)](https://phpackages.com/packages/sukerd-swoft-websocket-beautify)
```

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
