swoole中可以使用server->bind获取uid,server->bind将连接绑定一个用户定义的uid,可以设置dispatch_mode=5设置以此值进行hash固定分配。可以保证某一个uid的连接全部会分配到同一个worker进程。
function server->bind(int $fd, int $uid);
$fd:连接的id
$uid:要绑定的uid,必须为非0的数字
未绑定uid时默认使用fd取模进行分配
同一个连接只能被bind一次,如果已经绑定了uid,再次调用bind会返回false
可以使用$serv->getclientinfo($fd) 查看连接所绑定uid的值
仅在设置dispatch_mode=5时有效
在默认的dispatch_mode=2设置下,server会按照socket fd来分配连接数据到不同的worker进程。因为fd是不稳定的,一个客户端断开后重新连接,fd会发生改变。
这样这个客户端的数据就会被分配到别的worker。使用bind之后就可以按照用户定义的uid进行分配。即使断线重连,相同uid的tcp连接数据会被分配相同的worker进程。
推荐学习: swoole视频教程
以上就是swoole如何获取uid的详细内容。