在php-fpm或apache中使用swoole

swoole扩展中swoole_server只能在cli模式下使用,在其他模式下会抛出致命错误。 而swoole_client和swoole_event是可以用在php-fpm或apache+mod_php5中的。

需要注意的是使用swoole_client异步和swoole_event,在所有数据收到并处理完后,一定要执行$client->close()、swoole_event_del或swoole_event_exit,否则swoole无法得知什么时候要停止epoll wait。

同步swoole_client

<?php
$client = new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_SYNC); //同步阻塞
$client->connect('127.0.0.1', 9501) or die("connect failed\n");

$client->send(str_repeat("A", 600));
$data = $client->recv(700, 0) or die("recv failed\n);;
echo "recv: ",$data,"\n";

异步swoole_client

<?php
$client = new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_ASYNC); //异步非阻塞

$client->on("connect", function(swoole_client $cli) {
    $cli->send("GET / HTTP/1.1\r\n\r\n");
});

$client->on("receive", function(swoole_client $cli, $data){
    echo "Received: $data";
    $cli->close();
});

$client->on("error", function(swoole_client $cli){
    exit("error\n");
});

$client->on("close", function(swoole_client $cli){
    echo "Connection close";
});

$client->connect('127.0.0.1', 9501, 0.5);

echo "connect to 127.0.0.1:9501";
//for PHP5.3-
//swoole_event_wait();