Stream_Socket_ServerとStream_Socket_Clientの間の長い遅延同じPCで
-
13-10-2019 - |
質問
コマンドラインを介して下の2つのファイルを実行すると(最初にSocket_Serverを開始し、次にSocket_Client)、サーバーによって出力がSocket_Clientに送信される前に長い遅延(〜60秒)があります。このギャップを減らす方法はありますか、それとも問題を引き起こしているものに関するヒントはありますか?これが私の2つのコードスニペットです:
socket_client.php:
<?php
$fp = stream_socket_client("tcp://127.0.0.1:8000", $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
}
else {
fwrite($fp, "2");
echo fgets($fp, 1024);
}
fclose($fp);
?>
socket_server.php:
<?php
$socket = stream_socket_server("tcp://127.0.0.1:8000", $errno, $errstr);
if (!$socket) {
echo "$errstr ($errno)<br />\n";
} else {
while ($conn = stream_socket_accept($socket)) {
while (!feof($conn)) {
$result = fgets($conn, 1024);
if($result = "2"){
fwrite($conn, "Hullo there");
}
else{
fwrite($conn, "Hullo here\n");
}
}
fwrite($conn, 'The local time is ' . date('n/j/Y g:i a') . "\n");
fclose($conn);
}
fclose($socket);
}
?>
解決
- あなたは送るのを忘れていました
\n
いくつかの終わりにfwrite
電話。これが問題を引き起こした理由は、からですfgets
Newlineが戻る前にNewlineを探しています。 - 削除しました
feof
クライアントが1行のみを送信しているため、サーバーからループします。 - 追加しました
feof
クライアントにループして、サーバーから送信された複数の行を処理します。 - 私が変更され
if($result =
の中へif ($result ==
なぜなら==
比較演算子です(これは実際に望んでいたものです)。内部if
あなたがほとんど常に使用したいステートメント==
それ以外の=
.
socket_client.php:
<?php
$fp = stream_socket_client("tcp://127.0.0.1:8000", $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
fwrite($fp, "2\n");
while (!feof($fp)) {
echo fgets($fp, 1024);
}
}
fclose($fp);
?>
socket_server.php:
<?php
$socket = stream_socket_server("tcp://127.0.0.1:8000", $errno, $errstr);
if (!$socket) {
echo "$errstr ($errno)<br />\n";
} else {
while ($conn = stream_socket_accept($socket)) {
$result = fgets($conn, 1024);
if ($result == "2\n") {
fwrite($conn, "Hullo there\n");
} else {
fwrite($conn, "Hullo here\n");
}
fwrite($conn, 'The local time is ' . date('n/j/Y g:i a') . "\n");
fclose($conn);
}
fclose($socket);
}
?>
所属していません StackOverflow