为什么页面重新加载后套接字流会出错?

问题描述

我使用的是 php 流套接字服务器,问题是重新加载页面后通信不正确。我无法向更新其页面并重新连接到服务器的 ID 发送数据。请帮忙。我试图在客户端数组中找到引用,也尝试删除旧引用但不起作用。我不认为我的脚本删除了某些内容,因此重新连接很糟糕。当我在客户端数组上尝试 sendmessages 命令时,一切正常,沟通正常。

    <?php
set_time_limit(0);
if(isset($_GET['start'])){
$id=$_GET['id'];
settype($id,int);
$fp=$_GET['fp'];
settype($fp,string);
$incoming=sha1($_SERVER['REMOTE_ADDR'].$_GET['id']."Sk9P24TvCE");
settype($incoming,string);
}
$host='127.0.0.1';
$port='9000';
$server = stream_socket_server("tcp://$host:$port",$errno,$errstr);
if (!$server) {  die("$errstr ($errno)"); }
$clients = array($server);
$write  = NULL;
$except = NULL;
while (true) {
  $changed = $clients;
  stream_select($changed,$write,$except,10);
  if (in_array($server,$changed)) {
    $client[$id] = @stream_socket_accept($server);
    if (!$client[$id]){ continue; }
    $clients[]=$client[$id];
    $client[$id]['hash']=$incoming;
    $ip = stream_socket_get_name( $client[$id],true );
    stream_set_blocking($client[$id],true);
    $headers = fread($client[$id],1500);
    handshake($client[$id],$headers,$host,$port);
    stream_set_blocking($client[$id],false);
    @fwrite($client[$id],mask($ip . ' connected'));
    if($fp != $client[$id]['hash']){
    @fwrite($client[$id],mask($ip . ' closed'));
    @fclose($clients[$id]);
    }
    $found_socket = array_search($server,$changed);
    unset($changed[$found_socket]);    
  }
  foreach ($changed as $changed_socket) {
    $buffer = stream_get_contents($changed_socket);
    if ($buffer == false) {
      @fclose($changed_socket);
            $found_socket = array_search($changed_socket,$clients);
            unset($clients[$found_socket]);
        }
    $unmasked = unmask($buffer);
    $obj=(array)json_decode($unmasked);
    $who=$obj['id'];
    $response = trim(mb_convert_encoding($unmasked,'UTF-8'));
    $response = mask($response);
    @fwrite($clients[$who],$response);
    //send_message($clients,$response);
  }
  sleep(1);
}
fclose($server);

及工作方法:

function send_message($clients,$msg){
foreach($clients as $changed_socket){
@fwrite($changed_socket,$msg);
}

}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...