【问题标题】:Long delay between stream_socket_server and stream_socket_client on the same PC同一台 PC 上的 stream_socket_server 和 stream_socket_client 之间的延迟很长
【发布时间】:2011-05-30 11:43:25
【问题描述】:

当我通过命令行运行下面的两个文件时,(首先启动 socket_server,然后是 socket_client)在服务器将任何输出发送到 socket_client 之前有很长的延迟(~60 秒)。有没有办法减少这种差距,或者有什么暗示导致问题的原因?这是我的两个代码sn-ps:

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);
}
?>

【问题讨论】:

    标签: php sockets stream-socket-client


    【解决方案1】:
    • 您忘记在某些fwrite 呼叫结束时发送\n。造成问题的原因是 fgets 在返回之前寻找换行符。
    • 我从服务器中删除了feof 循环,因为客户端只发送一行。
    • 我在客户端添加了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);
    }
    
    ?>
    

    【讨论】:

    • 感谢您的输入,现在看来工作正常!我没有注意到 $result 错误,我想我需要休息一下!
    猜你喜欢
    • 2013-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-05
    • 1970-01-01
    • 2020-01-15
    • 2016-01-20
    • 2016-07-31
    相关资源
    最近更新 更多