swoft\websocket-server 的补充与封装
composer require sukerd/swoft-websocket-beautify:dev-master
下文不再做解释
$uid 这里uid泛指用户id或者设备id,用来唯一确定一个客户端用户或者设备
$fd 是与客户端的连接 ID,它表明了不同的客户端
如果想实现分组啥的还请自行实现,因为我目前的业务暂时用不到(其实也挺简单),后续有需求了再说吧
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()->getServer()->disconnect($fd)踢掉之前的fd
4. 因为使用Redis hash实现的进程间共享内存,如果服务端产生异常(如:stop、restart、等等)会导致之前产生的绑定数据依然留存于缓存中,但是不用担心程序重启后数据冲突的问题,一旦fd重新上线并进行绑定,Beautify会自己处理因意外原因遗留被绑定的uid、fd并解绑
Beautify::bindUid('10000');
public static function unbindUid(string $uid, int $fd = 0): void
$uid string
$fd int 非必须,指定解绑某个fd,如果默认则解绑全部
Beautify::unbindUid('10000', 1);
public static function unbindFd(int $fd): void
$fd int
fd下线(连接断开)时不会自动执行解绑,开发者必需调用Beautify::unbindFd($fd)解绑。
Beautify::unbindFd(1);
public static function isOnline(int $fd): bool
$fd int
1.检查连接是否为有效的WebSocket客户端连接
2.如果是客户端断网断电等极端情况掉线,服务端就无法得知连接已经断开,需自己实现心跳检测(如果不知道请自行面向百度编程)
Beautify::isOnline(1);
public static function isUidOnline(string $uid): int
$uid string
1.检查uid被绑定的fd连接是否为有效的WebSocket客户端连接并返回有效连接数
2.如果是客户端断网断电等极端情况掉线,服务端就无法得知连接已经断开,需自己实现心跳检测(如果不知道请自行面向百度编程)
Beautify::isUidOnline('10000');
public static function sendToUid(string $uid, string $data): int
$uid string
$data string
默认uid与fd是一对多的关系,如果当前uid下绑定了多个fd,则多个fd对应的客户端都会收到消息
Beautify::sendToUid('10000', 'hi, swoft!');
public static function sendToFd(int $fd, string $data): bool
$fd int
$data string
Beautify::sendToFd(1, 'hi, swoft!');
public static function getFd(string $uid): array
$uid string
按uid获取与之绑定的fd
vdump(Beautify::getFd('10000')); // [1,2,3]
public static function getAllUidFd(): array
获取全局所有uid-fd列表
vdump(Beautify::getAllUidFd()); // ['10000'=>'1,2,3' ,'10001'=>'4']
public static function getUid(string $fd): string
$fd string
按fd获取与之绑定的uid
vdump(Beautify::getFd('10000')); // [1,2,3]
public static function getAllFdUid(): array
获取全局所有fd-uid列表
vdump(Beautify::getAllFdUid()); // [1 => '10000', 2 => '10000', 3 => '10000', 4 => '10001']