大家好,我第一次用这个系统。现在的需求是:A怎么将信息只推送给B,或者系统指定给B推送信息。能不能根据$socket->id单独去推送信息?下面是代码,请问如何去实现?
$m = new Memcache;
$m->connect("127.0.0.1",11211);
$io = new SocketIO(2020);
$io->on('connection', function($socket)use($io){
//接收连接人员数据
$socket->on('senduser', function($data)use($socket){
global $m;
$sortarr = $m->get('sorket');
if($sortarr){
if(array_key_exists($data,$sortarr)){
$sortarr[$data]["sortid"] = $socket->id;
}else{
$sortarr[$data] = $socket->id;
}
}else{
$sortarr = array("$data" => $socket->id);
}
$m->set('sorket',$sortarr,0,0);
});
//接收数据,并发送到指定人员
$socket->on('sendmsg', function ($data)use($socket){
global $m;
if($m->get('sorket')){
$sortarr = $m->get('sorket');
$uid = $data['uid'];
if(array_key_exists($uid,$sortarr)){
//$socket->emit('getmsg',$sortarr[$uid]);
$socket->to($sortarr[$uid])->emit('getmsg',$data["message"]);
}
}
});
});
//向特定的用户发送消息:注意需要将业务id 和 $socket->id 进行映射
你好,请问能说得详细些吗?具体怎么映射?
你业务里肯定用的肯定业务数据比如用户ID吧,所以用户ID和$socket->id那就得做个映射。
Array ( [23] => d669242e43abd74104ce6c48 [29] => e4916a3043abd74101467d91 ),这个是我存在Memcache里的数组,23是用户ID,后面对应的是每次用户连接时获取的$socket->id。你的意思是用对应的$socket->id去推送吗?$arr=Array ( [23] => d669242e43abd74104ce6c48 [29] => e4916a3043abd74101467d91 ),$io->to($arr[23])->emit();这样去做吗。这样我试过,没有成功。
麻烦指教下,这样问题困扰了一两天了
我用着好好的呢,原理就是那样,自查代码吧。