VOOZH about

URL: https://openswoole.com

⇱ Open Swoole: PHP Server with Async IO, Coroutines and Fibers (previously Swoole) | Open Swoole PHP


Powering the next-generation microservices and application

Build high-performance, scalable, concurrent TCP, UDP, Unix Socket, HTTP, WebSocket, GRPC 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, GRPC, 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.

Open 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, bringing event loops and asynchronous programming to the PHP language.

Event-driven, PHP Coroutine, PHP Fiber, Asynchronous API

Async TCP / UDP / HTTP / Websocket / HTTP2 / GRPC 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

Multiprocessing and daemonize

PHP PSR support

GRPC server and clients

Free and Open Source (Apache 2 License)

Get Started

  • 1

    Installation

    # Linux users #!/bin/bashpecl install openswoole-26.2.0 # Mac users brew install php #!/bin/bashpecl install openswoole-26.2.0 # Install core librarycomposer require openswoole/core:26.2.0
  • 2

    HTTP Server

    <?php$server=newOpenSwoole\HTTP\Server("127.0.0.1",9501);$server->on("start",function(OpenSwoole\Http\Server$server){echo"OpenSwoole http server is started at http://127.0.0.1:9501\n";});$server->on("request",function(OpenSwoole\Http\Request$request,OpenSwoole\Http\Response$response){$response->header("Content-Type","text/plain");$response->end("Hello World\n");});$server->start();
  • 3

    WebSocket Server

    <?php$server=newOpenSwoole\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();
  • 4

    TCP Server

    <?php$server=newOpenSwoole\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,"OpenSwoole: {$data}");$server->close($fd);});$server->on('close',function($server,$fd){echo"connection close: {$fd}\n";});$server->start();
  • 5

    Coroutine TCP Client

    <?php$client=newOpenSwoole\Client(\OpenSwoole\Constant::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();
  • 6

    Coroutine Redis / HTTP / WebSocket Client

    <?php// Enable coroutine support for Redis APIco::set(['hook_flags'=>OpenSwoole\Runtime::HOOK_ALL]);$redis=newRedis();$redis->connect('127.0.0.1',6379);$val=$redis->get('key');echo$val;$http=newOpenSwoole\Coroutine\Http\Client('127.0.0.1',80);$http->get('/index.php');echo$http->body;$http->close();
  • 7

    Coroutine Tasks

    <?php$server=newOpenSwoole\Http\Server("0.0.0.0",9501);$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(OpenSwoole\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();
  • 8

    PSR HTTP Services

    <?phprequire__DIR__.'/vendor/autoload.php';useOpenSwoole\Core\Psr\Middleware\StackHandler;useOpenSwoole\Core\Psr\Response;useOpenSwoole\HTTP\Server;usePsr\Http\Message\ResponseInterface;usePsr\Http\Message\ServerRequestInterface;usePsr\Http\Server\MiddlewareInterface;usePsr\Http\Server\RequestHandlerInterface;$server=newServer('127.0.0.1',9501);$server->on('start',function(Server$server){echo"OpenSwoole http server is started at http://127.0.0.1:9501 ";});classDefaultResponseMiddlewareimplementsMiddlewareInterface{publicfunctionprocess(ServerRequestInterface$request,RequestHandlerInterface$handler):ResponseInterface{return(newResponse('aaaa'))->withHeader('x-a','1234');}}$stack=(newStackHandler())->add(newDefaultResponseMiddleware());$server->setHandler($stack);$server->start();
  • 9

    GRPC Services

    <?phprequire__DIR__.'/vendor/autoload.php';useHelloworld\GreeterService;useHelloworld\StreamService;useOpenSwoole\GRPC\Middleware\LoggingMiddleware;useOpenSwoole\GRPC\Middleware\TraceMiddleware;useOpenSwoole\GRPC\Server;// enable hooks on IO clientsco::set(['hook_flags'=>OpenSwoole\Runtime::HOOK_ALL]);$server=(newServer('127.0.0.1',9501))->register(GreeterService::class)->register(StreamService::class)->withWorkerContext('worker_start_time',function(){returntime();})// use middlewares->addMiddleware(newLoggingMiddleware())->addMiddleware(newTraceMiddleware())->set(['log_level'=>\OpenSwoole\Constant::LOG_INFO,])->start();

Community

Join 4,000+ others and never miss out on new tips, tutorials, and more.

Open Swoole Documentation

OpenSwoole Components

Open Swoole Server

PHP Coroutine

Coroutine Clients

Open Swoole Multiprocessing

Open Swoole Community

Tweets by openswoole

Open Swoole Use Cases

Mobile API Server
Internet Of Things (IoT Solutions)
Micro Services
Realtime Trading Engine
Gaming Server
Live Chat System

OpenSwoole Resources

Debug OpenSwoole Coroutines with Xdebug Step Debugging

Build a Production Health Check with OpenSwoole Event Loop Lag Metrics

MemVector: Vector Search, Embeddings and RAG in a PHP Extension

OpenSwoole 26.2.0 released with PHP 8.5 support

New Features and Changes in PHP 8.5 and OpenSwoole 26.2.0

OpenSwoole 25.2.0 released with PHP 8.4 support