Build high-performance, scalable, concurrent TCP, UDP, Unix Socket, HTTP, WebSocket services with PHP and easy to use coroutine, fibers API
Write your next scalable async application with PHP coroutines and fibers.
Compared with other async programming frameworks or software such as Nginx, Tornado, Node.js, Open Swoole is a complete async solution that has built-in support for async programming via fibers/coroutines, a range of multi-threaded I/O modules (HTTP Server, WebSockets, TaskWorkers, Process Pools) and support for popular PHP clients like PDO for MySQL, Redis and CURL.
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 enhances the efficiency of your PHP applications and brings you out of the traditional stateless model, enabling you to focus on the development of innovative products at high scale, brining event loops and asynchronous programming to the PHP language.
Event-driven, PHP Coroutine, PHP Fiber, Asynchronous API
Async TCP / UDP / HTTP / Websocket / HTTP2 Client / Server Side API
IPv4 / IPv6 / UnixSocket / TCP / UDP and SSL / TLS / DTLS
Native PHP Coroutine and PHP Fiber Support
High performance, scalable, support C1000K
Milliseconds task scheduler
Free and Open Source (Apache 2 License)
Multiprocessing and Daemonize
Linux users #!/bin/bash pecl install openswoole Mac users brew install php #!/bin/bash pecl install openswoole
<?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' => 'openswoole.com', '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();
Join 2,000+ others and never miss out on new tips, tutorials, and more.
Open Swoole 4.11.1 released with multiple bug fixes
Open Swoole 4.11.0 released with HTTP2 improvements, PHP GRPC server, bug fixes and more
Open Swoole 4.10.0 released with coroutine selector, HTTP2 SSE streaming, sleep data type bug fixes and more
How to install Open Swoole on Ubuntu and Windows WSL
Open Swoole 4.9.0 released: Server Metrics, Cloud Native OpenMetrics support and more
Open Swoole IDE Helper released with enhanced type hinting for IDE