php套接字服务器速度慢(约20秒延迟)

php套接字服务器速度慢(约20秒延迟),php,sockets,Php,Sockets,从iOS方面看,一切都很好。数据被快速写入NSOutputStream。但是,下面的错误日志在大约20秒后更新,然后我在我的应用程序中得到响应 以下是php: #!/usr/local/bin/php –q <?php set_time_limit(0); $server = stream_socket_server("tcp://---ip----:10001", $errno, $errorMessage); while(true) { $client = @stream

从iOS方面看,一切都很好。数据被快速写入
NSOutputStream
。但是,下面的
错误日志在大约20秒后更新,然后我在我的应用程序中得到响应

以下是php:

#!/usr/local/bin/php –q
<?php

set_time_limit(0);

$server = stream_socket_server("tcp://---ip----:10001", $errno, $errorMessage);

while(true)
{
    $client = @stream_socket_accept($server);

    if ($client)
    {
        $client_data = stream_get_contents($client);
        if($client_data)
        {
            $json = json_decode($client_data, true);
            error_log("client data received: " . $client_data);

            //response code....
            fwrite($client, $output);

        }
        fclose($client);
    }
}

现在一切都很快。如果有人反对这个解决方案,请这样做。PHP文档说不要使用
未读字节
,但这似乎有点争议,在这种情况下,它可以完成这项工作。

您的代码不能很好地处理多个客户端。您应该使用stream\u select或epoll(libevent等)来处理多个客户端

您可以在php中尝试一些异步框架。例如或

这里是工人演示。 创建test.php

<?php
require_once './Workerman/Autoloader.php';
use Workerman\Worker;

// A worker listen 10001
$worker = new Worker("Text://0.0.0.0:10001");
// Create 4 processes
$worker->count = 4;
// When a client connect.
$worker->onConnect = function($connection){};
// When a client send a message.
$worker->onMessage = function($connection, $data)
{
    echo "Recv data:".$data."\n";
    $connection->send('Recv success!');
};
// When a client close connection.
$worker->onClose = function($connection){};
// Run all worker.
Worker::runAll();
我希望这会对你有所帮助

<?php
require_once './Workerman/Autoloader.php';
use Workerman\Worker;

// A worker listen 10001
$worker = new Worker("Text://0.0.0.0:10001");
// Create 4 processes
$worker->count = 4;
// When a client connect.
$worker->onConnect = function($connection){};
// When a client send a message.
$worker->onMessage = function($connection, $data)
{
    echo "Recv data:".$data."\n";
    $connection->send('Recv success!');
};
// When a client close connection.
$worker->onClose = function($connection){};
// Run all worker.
Worker::runAll();
telnet ---ip---- 10001
Trying ---ip----...
Connected to ---ip----.
Escape character is '^]'.