问大伙一个问题,swoole如果不用fd,只用uid对uid是否可以实现推送和即时通讯,还是说必须要uid->fd对uid->fd实现即时通讯和推送,那么uid和fd如何进行映射,是不是针对当前uid在mysql或者redis设置fd,然后通过登录的uid查找到fd进行推送和即时通讯?
问大伙一个问题,swoole如果不用fd,只用uid对uid是否可以实现推送和即时通讯,还是说必须要uid->fd对uid->fd实现即时通讯和推送,那么uid和fd如何进行映射,是不是针对当前uid在mysql或者redis设置fd,然后通过登录的uid查找到fd进行推送和即时通讯?
可以借助第三方储存,这就是一个多对一的关系绑定。
多个fd对应一个uid (多个uid对应一个group_id)
或者用框架有现成的方法可用 例如one
https://github.com/lizhichao/... $this->global_data->bindId($fd, $uid);
使用
Server->bind
将连接绑定一个用户定义的UID
,可以设置dispatch_mode=5
设置以此值进行hash
固定分配。可以保证某一个UID
的连接全部会分配到同一个Worker
进程。在默认的
dispatch_mode=2
设置下,Server
会按照socket fd
来分配连接数据到不同的Worker
进程。因为fd
是不稳定的,一个客户端断开后重新连接,fd
会发生改变。这样这个客户端的数据就会被分配到别的Worker
。使用bind
之后就可以按照用户定义的UID
进行分配。即使断线重连,相同
UID
的TCP
连接数据会被分配相同的Worker
进程。具体的看一下
Swoole
文档吧,https://wiki.swoole.com/wiki/...