phpsocket.io如何向一个组广播?

计算机爱好者

我查看了一下手册,安装上面的去写,
1,首先加入分组
$connection->join('group name');
2,向这个分组广播信息
$io->to('group name')->emit('event name', $data);
发觉只有自己的客户端收到信息,其他客户端收不到,只能收到自己的信息,
这个group name 我写的是121212 ,如果直接
$io->emit('event name', $data);
所有的客户端都可以收到的到,但没有达到分组的功能,
请问如何什么回事??????????????
 
 

2699 4 0
4个回答

walkor

贴所有代码,及测试方法

  • 暂无评论
计算机爱好者

server.php

$io = new SocketIO(3120,$context);
$io->on('connection', function($socket)use($io){
     $socket->addedUser=false;
     
     //登录链接
   $socket->on("login",function($msg)use($socket,$io,){
    global $roomToUserNameameList;
   $socket->addedUser=true;
   $roomToUserNameameList=array('userid'=>$msg,'username'=>$msg,'level'=>$msg);//保存每个房间的用户的列表
   $socket->join($msg);//分房间
 
  $socket->uid=array($msg,$msg,$msg,$msg);
  
 $message=$level.urldecode($msg)."进入房间";
   $count=isset($roomToUserNameameList)?count($roomToUserNameameList):0;
   
//对房间用户发送消息
  ** $io->to($msg)->emit('login_leave_room',array("message"=>$message,"onlineUserNameList"=>$roomToUserNameameList,'count'=>$count));**
   
}

js页面-------------------------------------

<script>
 var socket= io("https://xxxxxxx:3120",{ 'reconnect': true });
socket.emit("login",{'username':encodeURI(userInfo.username),'userid':userInfo.userid,'level':userInfo.level,'roomid':roomInfo.roomid,'roomtype':'live'});
 
socket.on("login_leave_room",function(msg){

//用户用户列表
alert("OK");      
});
</script>

测试方法:A用户进入房间自己会弹出OK,B用户进入房间,B会弹出OK,A用户不会弹出OK,但是不是为什么过了一会刷新A用户,两者都会弹出Ok,但刷新B用户,只有B用户自己会弹出OK
所以有点困惑,如果直接$io->emit()就正常了,所以、????
 

  • 暂无评论
walkor

代码太乱了,没法看。
我觉得是业务逻辑问题,有可能是roomid传错了。
 
重新建立一个文件单独测试你说的问题,
业务逻辑里就这2个
$connection->join('121212');
$io->to('121212')->emit('event', );
有问题再贴出你的代码
 
 

  • 暂无评论
计算机爱好者

已经解决了,是我有些代码写错了,是按照你写的,非常感谢!!!还有一点,就是手机浏览,手机黑屏会自动断开socket服务器的?

  • walkor 2019-05-14

    苹果会,安卓不清楚

  • 计算机爱好者 2019-05-14

    @1:nginx做反向代理
    location /wss
    {
    proxy_pass http://127.0.0.1:8282;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "Upgrade";
    proxy_set_header X-Real-IP $remote_addr;
    }
    在nginx配置如上
    小程序连接url:wss://xxxx.com/wss
    小程序报错: Error during WebSocket handshake: Unexpected response code: 404
    请问问题???

  • 计算机爱好者 2019-05-14

    @1:手册写的是localtion /socket.io 我改成了wss小程序都连接不上

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