问题描述
我使用的是 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 (将#修改为@)