请问怎么给指定用户推送信息

rosheng

大家好,我第一次用这个系统。现在的需求是: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"]);
           }
        }
    });

});
2992 1 0
1个回答

blogdaren

//向特定的用户发送消息:注意需要将业务id 和 $socket->id 进行映射

$io->to($socket->id)->emit();
  • rosheng 2020-05-02

    你好,请问能说得详细些吗?具体怎么映射?

  • blogdaren 2020-05-02

    你业务里肯定用的肯定业务数据比如用户ID吧,所以用户ID和$socket->id那就得做个映射。

  • rosheng 2020-05-02

    Array ( [23] => d669242e43abd74104ce6c48 [29] => e4916a3043abd74101467d91 ),这个是我存在Memcache里的数组,23是用户ID,后面对应的是每次用户连接时获取的$socket->id。你的意思是用对应的$socket->id去推送吗?$arr=Array ( [23] => d669242e43abd74104ce6c48 [29] => e4916a3043abd74101467d91 ),$io->to($arr[23])->emit();这样去做吗。这样我试过,没有成功。

  • rosheng 2020-05-02

    麻烦指教下,这样问题困扰了一两天了

  • blogdaren 2020-05-02

    我用着好好的呢,原理就是那样,自查代码吧。

年代过于久远,无法发表回答
🔝