【问题标题】:PHP TCP connection time delayPHP TCP连接时间延迟
【发布时间】:2018-01-02 21:11:28
【问题描述】:

我的树莓派上运行了一个 TCP 服务器,当它接收到命令“r”时,它可以返回一些传感器数据。 在 telnet 中,这看起来像:

>> r

123,123,131,321;

我通过 telnet 立即从服务器获得答案。由于我想查看来自不同设备的数据,我决定构建一个 PHP 和 javascript 接口。

在我的 javascript 代码中,我调用了一个 PHP 方法来读取用于读取 TCP 服务器的 php 方法:

$.ajax('readTCP.php', {
            type: 'POST',
            cache: false,
            async: false,
            dataType: 'json',
            success: function(data){
                drawStatus();
                $('.statustext').text('Status:  ' + data);
            },
            error: function() {
                console.error("fehler")
            }
        });

读取TCP.php:

<?php
    $str = "oi";
    $fp = fsockopen("localhost", 1234, $errno, $errstr, 30);
    if (!$fp) {
        echo "Fehler!";
    } else {
        fwrite($fp, "r");
        $str = fgets ($fp, 1024);
        fclose($fp);
    }
    echo json_encode($str);
?>

我遇到的问题是,使用此脚本读取 TCP 服务器大约需要 45 秒。

我不是 PHP 专家,这可能是一个明显的错误,但我无法弄清楚。

为什么这么慢?

【问题讨论】:

    标签: javascript php tcp


    【解决方案1】:

    我在我的树莓派上运行了一个模拟 TCP 客户端。不同之处在于我使用的是fread($fp, 20); 而不是fgets ($fp, 1024);。

    所以试试这个:

    <?php
        $str = "oi";
        $fp = fsockopen("localhost", 1234, $errno, $errstr, 30);
        if (!$fp) {
            echo "Fehler!";
        } else {
            fwrite($fp, "r");
            $str = fread($fp, 20);
            echo json_encode($str);
            fclose($fp);
        }
    ?>
    

    【讨论】:

      猜你喜欢
      • 2011-03-18
      • 1970-01-01
      • 2017-11-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-07
      • 2013-03-13
      • 2013-07-13
      • 2012-04-01
      相关资源
      最近更新 更多