私は個人的なプロジェクトに取り組んでおり、マルチクライアントサーバーでソケットを管理するのに問題があります。
したがって、php.net によると、socket_create によって作成されたソケット、または socket_accept によって受け入れられたソケットを socket_read() の引数に入れることが可能です...
私が理解していれば、socket_create によって作成されたソケットは「ローカル」ソケットであり、socket_accept によって送信されたソケットはソケット クライアントです。
この場合、サーバー ソケットを socket_read のパラメータに配置して、このソケットへの複数の書き込みの中でクライアントを待機させたいと考えています。
より明確には、4つのクライアントを受け入れ、そのうちの1つがこのソケットに書き込むのを待ちますが、どのクライアントが書き込むかわからないため、特定のクライアントソケットをパラメーターに入れることはできません...
そして、socket_createによって作成されたソケットを配置すると、phpはエラーを返します
私の母国語はご覧のとおり英語ではありませんが、誰も私に答えることができませんでした...
if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) {
echo "socket_create() a échoué : raison : " . socket_strerror(socket_last_error()) . "\n";
}
if (socket_bind($sock, $this->address, $this->port) === false) {
echo "socket_bind() a échoué : raison : " . socket_strerror(socket_last_error($sock)) . "\n";
}
if (socket_listen($sock, 5) === false) {
echo "socket_listen() a échoué : raison : " . socket_strerror(socket_last_error($sock)) . "\n";
}
for($i=0;$i<$this->maxClient;$i++){
if(($client = socket_accept($sock)) === false){
echo "socket_accept() a échoué : raison : " . socket_strerror(socket_last_error($sock)) . "\n";
break;
}else echo "<br/>Client $client[$i] has connected\n";
$this->joueurs[$i] = new Joueur($client,$i);
}
while($start){
$messageClient = socket_read($sock , 1024);
......
}
したがって、私には2つの問題があります。1つ目は、socket_read()がスクリプトをブロックしないようにする必要があることと、読み取るものが見つかるまでソケットをスキャンすることです。
2番目の問題は、プログラムが停止しないため、クライアントが何も受信せず、サーバーを停止するとクライアントがメッセージを受信することです...
何か考えはありますか?
ありがとう