关于用户分组
s
o
c
k
e
t
−
>
o
n
(
′
l
o
g
i
n
′
,
f
u
n
c
t
i
o
n
(
socket->on('login', function (
socket−>on(′login′,function(uid)use($socket){
global $uidConnectionMap;
global $db;
u
i
d
1
=
e
x
p
l
o
d
e
(
′
,
′
,
uid1 = explode(',',
uid1=explode(′,′,uid);
KaTeX parse error: Expected 'EOF', got '\Workerman' at position 10: db = new \̲W̲o̲r̲k̲e̲r̲m̲a̲n̲\MySQL\Connecti…socket->uid)){
return;
}
// 更新对应uid的在线数据
u
i
d
=
(
s
t
r
i
n
g
)
uid = (string)
uid=(string)uid;
if(!isset(
u
i
d
C
o
n
n
e
c
t
i
o
n
M
a
p
[
uidConnectionMap[
uidConnectionMap[uid]))
{
u
i
d
C
o
n
n
e
c
t
i
o
n
M
a
p
[
uidConnectionMap[
uidConnectionMap[uid] = 0;
}
// 这个uid有++
u
i
d
C
o
n
n
e
c
t
i
o
n
M
a
p
[
uidConnectionMap[
uidConnectionMap[uid]个socket连接
++
u
i
d
C
o
n
n
e
c
t
i
o
n
M
a
p
[
uidConnectionMap[
uidConnectionMap[uid];
// 将这个连接加入到uid分组,方便针对uid推送数据
$socket->join($uid1[1]);
$socket->uid = $uid;
// 更新这个socket对应页面的在线数据
$socket->to($uid)->emit('update_online_count',$uidConnectionMap[$uid]);
});
这是我监控登陆的函数,首先我登陆传过来的
u
i
d
是
一
个
字
符
串
,
格
式
是
1
(
用
户
I
D
)
,
5
t
(
房
间
I
D
,
要
用
来
当
做
组
名
)
,
想
问
的
是
,
j
o
i
n
这
个
是
加
入
组
吧
,
组
名
是
我
传
的
uid是一个字符串,格式是1(用户ID),5t(房间ID,要用来当做组名),想问的是,join这个是加入组吧,组名是我传的
uid是一个字符串,格式是1(用户ID),5t(房间ID,要用来当做组名),想问的是,join这个是加入组吧,组名是我传的uid1[1],也就是5t,那下面的 $socket->uid = $uid;是做什么用的,我想给房间5t发送消息是成功的,我想给单独的一个uid也就是1,5t发送消息,显示OK,但是在实际上并没有收到,感觉对这个分组还不是很理解,求各位大佬帮帮忙
以下是一些网友的回答:
首先我是加了一个
s
o
c
k
e
t
−
>
j
o
i
n
(
socket->join(
socket−>join(uid1[0]);
也就是把用户ID也当成一个组,然后发送时发送这个
u
i
d
1
[
0
]
,
也
就
是
用
户
I
D
就
能
单
独
给
这
个
用
户
发
送
。
j
o
i
n
是
加
入
组
,
uid1[ 0],也就是用户ID就能单独给这个用户发送。join是加入组,
uid1[0],也就是用户ID就能单独给这个用户发送。join是加入组,socket->uid = $uid,这个就不是很理解了
$socket->uid = u i d 是 记 录 下 当 前 这 个 uid 是记录下当前这个 uid是记录下当前这个socket是属于哪个uid,如果这个 s o c k e t 断 开 , 则 需 要 把 它 从 socket断开,则需要把它从 socket断开,则需要把它从uidConnectionMap[$uid]删除