php套接字服务器速度慢(约20秒延迟)
从iOS方面看,一切都很好。数据被快速写入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
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 '^]'.