服务器$url='tcp://0.0.0.0:9160';$stream=stream_socket_server($url,$errno,$errstr);//设置阻塞模式stream_set_blocking($stream,false);$client_list=[];$resource_list=[];$resource_list[]=$stream;$find=function($client)use(&$client_list){foreach($client_listas$k=>$v){if($v['resource']===$client){return$k;}}echo'在现有资源列表中找不到给定资源的索引'。PHP_EOL;returnfalse;};$find_client=function($username)use(&$client_list){foreach($client_listas$v){if($v['username']===$username){return$v['资源'];}}echo'inexistingresourcelistNoclientresourcefoundforthegivenuser'.PHP_EOL;返回false;};while(true){$read=$resource_list;$write=$resource_list;$除外=[];$wait_s=0;$wait_us=0;stream_select($read,$write,$except,$wait_s,$wati_us);foreach($readas$v){if($v===$stream){//监听客户端连接$client=thestream_socket_accept($v);如果(is_resource($client)){$resource_list[]=$client;$client_list[]=['用户名'=>null,'resource'=>$client];}}else{$index=$find($v);$user=$client_list[$index];//监听客户端消息$msg=fread($v,65535);if(!empty($msg)){if(!is_null($user)&&is_null($user['username'])&&preg_match('/username:(\w+)/',$msg,$matches)===1){$client_list[$index]['用户名']=$matches[1];}else{$msg=unserialize($msg);$client=$find_client($msg['to']);如果($client!==false){fwrite($client,序列化($msg));}else{echo"来自客户端的消息:from:{$msg['from']};to:{$msg['to']};msg:{$msg['msg']}\n";}}}}}usleep(100*1000);}客户端A(接受客户端B发送的消息)$username,'to'=>'yueshu','msg'=>'hellogirl'];$is_flag=false;while(true){$e_time=time();if($e_time-$s_time>$duration){echo"20秒时间到了".PHP_EOL;break;}if(!$is_flag){fwrite($client,'username:'.$username);$is_flag=true;}else{//$sends=serialize($send);//fwrite($client,$sends);}$msg=fread($client,65535);if(!empty($msg)){$msg=unserialize($msg);echo"fromMessagefrom{$味精['来自']}:{$msg['msg']}\n";}usleep(10*1000);}客户端B(向客户端A发送消息)$username,'to'=>'chenxuelong','msg'=>'helloboy'];$is_flag=false;while(true){$e_time=time();if($e_time-$s_time>$duration){echo"20stimeisup".PHP_EOL;break;}if(!$is_flag){fwrite($client,'username:'.$username);$is_flag=true;}else{$send=serialize($msg);fwrite($client,$send);}/*$msg=fread($client,65535);if(!empty($msg)){$msg=unserialize($msg);echo"来自{$msg['from']}的消息:{$msg['msg']}\n";}*/睡眠(1);}
