swoole uid和fd如何进行映射

问大伙一个问题,swoole如果不用fd,只用uid对uid是否可以实现推送和即时通讯,还是说必须要uid->fd对uid->fd实现即时通讯和推送,那么uid和fd如何进行映射,是不是针对当前uid在mysql或者redis设置fd,然后通过登录的uid查找到fd进行推送和即时通讯?

阅读 5.1k
2 个回答

使用Server->bind将连接绑定一个用户定义的UID,可以设置dispatch_mode=5设置以此值进行hash固定分配。可以保证某一个UID的连接全部会分配到同一个Worker进程。

在默认的dispatch_mode=2设置下,Server会按照socket fd来分配连接数据到不同的Worker进程。因为fd是不稳定的,一个客户端断开后重新连接,fd会发生改变。这样这个客户端的数据就会被分配到别的Worker。使用bind之后就可以按照用户定义的UID进行分配。

即使断线重连,相同UIDTCP连接数据会被分配相同的Worker进程。

具体的看一下Swoole文档吧,https://wiki.swoole.com/wiki/...

可以借助第三方储存,这就是一个多对一的关系绑定。
多个fd对应一个uid (多个uid对应一个group_id)
或者用框架有现成的方法可用 例如onehttps://github.com/lizhichao/... $this->global_data->bindId($fd, $uid);

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏