Build high-performance, scalable, concurrent TCP, UDP, Unix Socket, HTTP, WebSocket services with PHP and easy to use coroutine, fiber API.
Write your next scalable async application server with PHP coroutine and PHP fiber API.
Get started in 10 minutes Tutorial Documentation CommunityCompared with other async programming frameworks or softwares such as Nginx, Tornado, Node.js, Swoole has the built-in PHP coroutine, fiber and async support, multiple threads I/O modules. You can use sync or async, coroutine, fiber API to write the applications or create thousands of light weight fibers within one Linux process. Swoole PHP network framework enhances the efficiency of development team.
#!/bin/bash pecl install swoole
brew install php #!/bin/bash pecl install swoole
<?php
$server = new Swoole\HTTP\Server("127.0.0.1", 9501);
$server->on("start", function (Swoole\Http\Server $server) {
echo "Swoole http server is started at http://127.0.0.1:9501\n";
});
$server->on("request", function (Swoole\Http\Request $request, Swoole\Http\Response $response) {
$response->header("Content-Type", "text/plain");
$response->end("Hello World\n");
});
$server->start();
<?php
$server = new Swoole\Websocket\Server("127.0.0.1", 9502);
$server->on('open', function($server, $req) {
echo "connection open: {$req->fd}\n";
});
$server->on('message', function($server, $frame) {
echo "received message: {$frame->data}\n";
$server->push($frame->fd, json_encode(["hello", "world"]));
});
$server->on('close', function($server, $fd) {
echo "connection close: {$fd}\n";
});
$server->start();
<?php
$server = new Swoole\Server("127.0.0.1", 9503);
$server->on('connect', function ($server, $fd){
echo "connection open: {$fd}\n";
});
$server->on('receive', function ($server, $fd, $from_id, $data) {
$server->send($fd, "Swoole: {$data}");
$server->close($fd);
});
$server->on('close', function ($server, $fd) {
echo "connection close: {$fd}\n";
});
$server->start();
<?php
$client = new Swoole\Client(SWOOLE_SOCK_TCP);
if (!$client->connect('127.0.0.1', 9501, 0.5)) {
exit("connect failed. Error: {$client->errCode}\n");
}
$client->send("hello world\n");
echo $client->recv();
$client->close();
<?php
$redis = new Swoole\Coroutine\Redis();
$redis->connect('127.0.0.1', 6379);
$val = $redis->get('key');
echo $val;
$http = new Swoole\Coroutine\Http\Client('127.0.0.1', 80);
$http->get('/index.php');
echo $http->body;
$http->close();
<?php
$server = new Swoole\Http\Server("0.0.0.0", 9501, SWOOLE_BASE);
$server->set([
'worker_num' => 1,
'task_worker_num' => 2,
]);
$server->on('Request', function ($request, $response) use ($server) {
$tasks[0] = ['time' => 0];
$tasks[1] = ['data' => 'www.swoole.co.uk', 'code' => 200];
$result = $server->taskCo($tasks, 1.5);
$response->end('<pre>Task Result: '.var_export($result, true));
});
$server->on('Task', function (Swoole\Server $server, $task_id, $worker_id, $data) {
if ($server->worker_id == 1) {
sleep(1);
}
$data['done'] = time();
$data['worker_id'] = $server->worker_id;
return $data;
});
$server->start();