# Swoole

# Introduction

Swoole is a parallel network communication engine based on asynchronous event-driven and coroutine, written in C++, providing coroutine and high-performance network programming support for PHP. It provides various network server and client modules for multiple communication protocols, making it easy to quickly implement TCP/UDP services, high-performance Web, WebSocket services, IoT, real-time communication, games, microservices, etc., breaking the limits of PHP in traditional web domains. To get started, please check the » Swoole Docs.

> Note: This extension is not available on Windows platforms.

- Installing/Configuring
  - Requirements
  - Installation
  - Runtime Configuration
- Predefined Constants
- Swoole Functions
  - swoole_async_dns_lookup — Async and non-blocking hostname to IP lookup
  - swoole_async_read — Read file stream asynchronously
  - swoole_async_readfile — Read a file asynchronously
  - swoole_async_set — Update the async I/O options
  - swoole_async_write — Write data to a file stream asynchronously
  - swoole_async_writefile — Write data to a file asynchronously
  - swoole_clear_error — Clear errors in the socket or on the last error code
  - swoole_client_select — Get the file description which are ready to read/write or error
  - swoole_cpu_num — Get the number of CPU
  - swoole_errno — Get the error code of the latest system call
  - swoole_error_log — Output error messages to the log
  - swoole_event_add — Add new callback functions of a socket into the EventLoop
  - swoole_event_defer — Add callback function to the next event loop
  - swoole_event_del — Remove all event callback functions of a socket
  - swoole_event_exit — Exit the eventloop, only available at the client side
  - swoole_event_set — Update the event callback functions of a socket
  - swoole_event_wait — Start the event loop
  - swoole_event_write — Write data to a socket
  - swoole_get_local_ip — Get the IPv4 IP addresses of each NIC on the machine
  - swoole_last_error — Get the lastest error message
  - swoole_load_module — Load a swoole extension
  - swoole_select — Select the file descriptions which are ready to read/write or error in the eventloop
  - swoole_set_process_name — Set the process name
  - swoole_strerror — Convert the Errno into error messages
  - swoole_timer_after — Trigger a one time callback function in the future
  - swoole_timer_exists — Check if a timer callback function is existed
  - swoole_timer_tick — Trigger a timer tick callback function by time interval
  - swoole_version — Get the version of Swoole
- Swoole\Async — The Swoole\Async class
  - Swoole\Async::dnsLookup — Async and non-blocking hostname to IP lookup.
  - Swoole\Async::read — Read file stream asynchronously.
  - Swoole\Async::readFile — Read a file asynchronously.
  - Swoole\Async::set — Update the async I/O options.
  - Swoole\Async::write — Write data to a file stream asynchronously.
  - Swoole\Async::writeFile — Description
- Swoole\Atomic — The Swoole\Atomic class
  - Swoole\Atomic::add — Add a number to the value to the atomic object.
  - Swoole\Atomic::cmpset — Compare and set the value of the atomic object.
  - Swoole\Atomic::__construct — Construct a swoole atomic object.
  - Swoole\Atomic::get — Get the current value of the atomic object.
  - Swoole\Atomic::set — Set a new value to the atomic object.
  - Swoole\Atomic::sub — Subtract a number to the value of the atomic object.
- Swoole\Buffer — The Swoole\Buffer class
  - Swoole\Buffer::append — Append the string or binary data at the end of the memory buffer and return the new size of memory allocated.
  - Swoole\Buffer::clear — Reset the memory buffer.
  - Swoole\Buffer::__construct — Fixed size memory blocks allocation.
  - Swoole\Buffer::__destruct — Destruct the Swoole memory buffer.
  - Swoole\Buffer::expand — Expand the size of memory buffer.
  - Swoole\Buffer::read — Read data from the memory buffer based on offset and length.
  - Swoole\Buffer::recycle — Release the memory to OS which is not used by the memory buffer.
  - Swoole\Buffer::substr — Read data from the memory buffer based on offset and length. Or remove data from the memory buffer.
  - Swoole\Buffer::__toString — Get the string value of the memory buffer.
  - Swoole\Buffer::write — Write data to the memory buffer. The memory allocated for the buffer will not be changed.
- Swoole\Channel — The Swoole\Channel class
  - Swoole\Channel::__construct — Construct a Swoole Channel
  - Swoole\Channel::__destruct — Destruct a Swoole channel.
  - Swoole\Channel::pop — Read and pop data from swoole channel.
  - Swoole\Channel::push — Write and push data into Swoole channel.
  - Swoole\Channel::stats — Get stats of swoole channel.
- Swoole\Client — The Swoole\Client class
  - Swoole\Client::close — Close the connection established.
  - Swoole\Client::connect — Connect to the remote TCP or UDP port.
  - Swoole\Client::__construct — Create Swoole sync or async TCP/UDP client, with or without SSL.
  - Swoole\Client::__destruct — Destruct the Swoole client.
  - Swoole\Client::getpeername — Get the remote socket name of the connection.
  - Swoole\Client::getsockname — Get the local socket name of the connection.
  - Swoole\Client::isConnected — Check if the connection is established.
  - Swoole\Client::on — Add callback functions triggered by events.
  - Swoole\Client::pause — Pause receiving data.
  - Swoole\Client::pipe — Redirect the data to another file descriptor.
  - Swoole\Client::recv — Receive data from the remote socket.
  - Swoole\Client::resume — Resume receiving data.
  - Swoole\Client::send — Send data to the remote TCP socket.
  - Swoole\Client::sendfile — Send file to the remote TCP socket.
  - Swoole\Client::sendto — Send data to the remote UDP address.
  - Swoole\Client::set — Set the Swoole client parameters before the connection is established.
  - Swoole\Client::sleep — Remove the TCP client from system event loop.
  - Swoole\Client::wakeup — Add the TCP client back into the system event loop.
- Swoole\Connection\Iterator — The Swoole\Connection\Iterator class
  - Swoole\Connection\Iterator::count — Count connections.
  - Swoole\Connection\Iterator::current — Return current connection entry.
  - Swoole\Connection\Iterator::key — Return key of the current connection.
  - Swoole\Connection\Iterator::next — Move to the next connection.
  - Swoole\Connection\Iterator::offsetExists — Check if offset exists.
  - Swoole\Connection\Iterator::offsetGet — Offset to retrieve.
  - Swoole\Connection\Iterator::offsetSet — Assign a Connection to the specified offset.
  - Swoole\Connection\Iterator::offsetUnset — Unset an offset.
  - Swoole\Connection\Iterator::rewind — Rewinds iterator
  - Swoole\Connection\Iterator::valid — Check if current position is valid.
- Swoole\Coroutine — The Swoole\Coroutine class
  - Swoole\Coroutine::call_user_func — Call a callback given by the first parameter
  - Swoole\Coroutine::call_user_func_array — Call a callback with an array of parameters
  - Swoole\Coroutine::cli_wait — Description
  - Swoole\Coroutine::create — Description
  - Swoole\Coroutine::getuid — Description
  - Swoole\Coroutine::resume — Description
  - Swoole\Coroutine::suspend — Description
- Swoole\Coroutine\Lock — The Swoole\Coroutine\Lock class
  - Swoole\Coroutine\Lock::__construct — Construct a new coroutine lock
  - Swoole\Coroutine\Lock::lock — Acquire the lock, blocking if necessary
  - Swoole\Coroutine\Lock::trylock — Attempt to acquire the lock without blocking
  - Swoole\Coroutine\Lock::unlock — Release the lock
- Swoole\Event — The Swoole\Event class
  - Swoole\Event::add — Add new callback functions of a socket into the EventLoop.
  - Swoole\Event::defer — Add a callback function to the next event loop.
  - Swoole\Event::del — Remove all event callback functions of a socket.
  - Swoole\Event::exit — Exit the eventloop, only available at client side.
  - Swoole\Event::set — Update the event callback functions of a socket.
  - Swoole\Event::wait — Description
  - Swoole\Event::write — Write data to the socket.
- Swoole\Exception — The Swoole\Exception class
- Swoole\Http\Client — The Swoole\Http\Client class
  - Swoole\Http\Client::addFile — Add a file to the post form.
  - Swoole\Http\Client::close — Close the http connection.
  - Swoole\Http\Client::__construct — Construct the async HTTP client.
  - Swoole\Http\Client::__destruct — Destruct the HTTP client.
  - Swoole\Http\Client::download — Download a file from the remote server.
  - Swoole\Http\Client::execute — Send the HTTP request after setting the parameters.
  - Swoole\Http\Client::get — Send GET http request to the remote server.
  - Swoole\Http\Client::isConnected — Check if the HTTP connection is connected.
  - Swoole\Http\Client::on — Register callback function by event name.
  - Swoole\Http\Client::post — Send POST http request to the remote server.
  - Swoole\Http\Client::push — Push data to websocket client.
  - Swoole\Http\Client::set — Update the HTTP client parameters.
  - Swoole\Http\Client::setCookies — Set the http request cookies.
  - Swoole\Http\Client::setData — Set the HTTP request body data.
  - Swoole\Http\Client::setHeaders — Set the HTTP request headers.
  - Swoole\Http\Client::setMethod — Set the HTTP request method.
  - Swoole\Http\Client::upgrade — Upgrade to websocket protocol.
- Swoole\Http\Request — The Swoole\Http\Request class
  - Swoole\Http\Request::__destruct — Destruct the HTTP request.
  - Swoole\Http\Request::rawcontent — Get the raw HTTP POST body.
- Swoole\Http\Response — The Swoole\Http\Response class
  - Swoole\Http\Response::cookie — Set the cookies of the HTTP response.
  - Swoole\Http\Response::__destruct — Destruct the HTTP response.
  - Swoole\Http\Response::end — Send data for the HTTP request and finish the response.
  - Swoole\Http\Response::gzip — Enable the gzip of response content.
  - Swoole\Http\Response::header — Set the HTTP response headers.
  - Swoole\Http\Response::initHeader — Init the HTTP response header.
  - Swoole\Http\Response::rawcookie — Set the raw cookies to the HTTP response.
  - Swoole\Http\Response::sendfile — Send file through the HTTP response.
  - Swoole\Http\Response::status — Set the status code of the HTTP response.
  - Swoole\Http\Response::write — Append HTTP body content to the HTTP response.
- Swoole\Http\Server — The Swoole\Http\Server class
  - Swoole\Http\Server::on — Bind callback function to HTTP server by event name.
  - Swoole\Http\Server::start — Start the swoole http server.
- Swoole\Lock — The Swoole\Lock class
  - Swoole\Lock::__construct — Construct a memory lock.
  - Swoole\Lock::__destruct — Destroy a Swoole memory lock.
  - Swoole\Lock::lock — Try to acquire the lock. It will block if the lock is not available.
  - Swoole\Lock::lock_read — Lock a read-write lock for reading.
  - Swoole\Lock::trylock — Try to acquire the lock and return straight away even the lock is not available.
  - Swoole\Lock::trylock_read — Try to lock a read-write lock for reading and return straight away even the lock is not available.
  - Swoole\Lock::unlock — Release the lock.
- Swoole\Mmap — The Swoole\Mmap class
  - Swoole\Mmap::open — Map a file into memory and return the stream resource which can be used by PHP stream operations.
- Swoole\MySQL — The Swoole\MySQL class
  - Swoole\MySQL::close — Close the async MySQL connection.
  - Swoole\MySQL::connect — Connect to the remote MySQL server.
  - Swoole\MySQL::__construct — Construct an async MySQL client.
  - Swoole\MySQL::__destruct — Destroy the async MySQL client.
  - Swoole\MySQL::getBuffer — Description
  - Swoole\MySQL::on — Register callback function based on event name.
  - Swoole\MySQL::query — Run the SQL query.
- Swoole\MySQL\Exception — The Swoole\MySQL\Exception class
- Swoole\Process — The Swoole\Process class
  - Swoole\Process::alarm — High precision timer which triggers signal with fixed interval.
  - Swoole\Process::close — Close the pipe to the child process.
  - Swoole\Process::__construct — Construct a process.
  - Swoole\Process::daemon — Change the process to be a daemon process.
  - Swoole\Process::__destruct — Destroy the process.
  - Swoole\Process::exec — Execute system commands.
  - Swoole\Process::exit — Stop the child processes.
  - Swoole\Process::freeQueue — Destroy the message queue created by swoole_process::useQueue.
  - Swoole\Process::kill — Send signal to the child process.
  - Swoole\Process::name — Set name of the process.
  - Swoole\Process::pop — Read and pop data from the message queue.
  - Swoole\Process::push — Write and push data into the message queue.
  - Swoole\Process::read — Read data sending to the process.
  - Swoole\Process::signal — Send signal to the child processes.
  - Swoole\Process::start — Start the process.
  - Swoole\Process::statQueue — Get the stats of the message queue used as the communication method between processes.
  - Swoole\Process::useQueue — Create a message queue as the communication method between the parent process and child processes.
  - Swoole\Process::wait — Wait for the events of child processes.
  - Swoole\Process::write — Write data into the pipe and communicate with the parent process or child processes.
- Swoole\Redis\Server — The Swoole\Redis\Server class
  - Swoole\Redis\Server::format — Description
  - Swoole\Redis\Server::setHandler — Description
  - Swoole\Redis\Server::start — Description
- Swoole\Runtime — The Swoole\Runtime class
  - Swoole\Runtime::enableCoroutine — Enable coroutine for specified functions
  - Swoole\Runtime::getHookFlags — Get current hook flags
  - Swoole\Runtime::setHookFlags — Set hook flags for coroutine
- Swoole\Serialize — The Swoole\Serialize class
  - Swoole\Serialize::pack — Serialize the data.
  - Swoole\Serialize::unpack — Unserialize the data.
- Swoole\Server — The Swoole\Server class
  - Swoole\Server::addlistener — Add a new listener to the server.
  - Swoole\Server::addProcess — Add a user defined swoole_process to the server.
  - Swoole\Server::after — Trigger a callback function after a period of time.
  - Swoole\Server::bind — Bind the connection to a user defined user ID.
  - Swoole\Server::clearTimer — Stop and destroy a timer.
  - Swoole\Server::close — Close a connection to the client.
  - Swoole\Server::confirm — Check status of the connection.
  - Swoole\Server::connection_info — Get the connection info by file description.
  - Swoole\Server::connection_list — Get all of the established connections.
  - Swoole\Server::__construct — Construct a Swoole server.
  - Swoole\Server::defer — Delay execution of the callback function at the end of current EventLoop.
  - Swoole\Server::exist — Check if the connection is existed.
  - Swoole\Server::finish — Used in task process for sending result to the worker process when the task is finished.
  - Swoole\Server::getClientInfo — Get the connection info by file description.
  - Swoole\Server::getClientList — Get all of the established connections.
  - Swoole\Server::getLastError — Get the error code of the most recent error.
  - Swoole\Server::heartbeat — Check all the connections on the server.
  - Swoole\Server::listen — Listen on the given IP and port, socket type.
  - Swoole\Server::on — Register a callback function by event name.
  - Swoole\Server::pause — Stop receiving data from the connection.
  - Swoole\Server::protect — Set the connection to be protected mode.
  - Swoole\Server::reload — Restart all the worker process.
  - Swoole\Server::resume — Start receiving data from the connection.
  - Swoole\Server::send — Send data to the client.
  - Swoole\Server::sendfile — Send file to the connection.
  - Swoole\Server::sendMessage — Send message to worker processes by ID.
  - Swoole\Server::sendto — Send data to the remote UDP address.
  - Swoole\Server::sendwait — Send data to the remote socket in the blocking way.
  - Swoole\Server::set — Set the runtime settings of the swoole server.
  - Swoole\Server::shutdown — Shutdown the master server process, this function can be called in worker processes.
  - Swoole\Server::start — Start the Swoole server.
  - Swoole\Server::stats — Get the stats of the Swoole server.
  - Swoole\Server::stop — Stop the Swoole server.
  - Swoole\Server::task — Send data to the task worker processes.
  - Swoole\Server::taskwait — Send data to the task worker processes in blocking way.
  - Swoole\Server::taskWaitMulti — Execute multiple tasks concurrently.
  - Swoole\Server::tick — Repeats a given function at every given time-interval.
- Swoole\Table — The Swoole\Table class
  - Swoole\Table::column — Set the data type and size of the columns.
  - Swoole\Table::__construct — Construct a Swoole memory table with fixed size.
  - Swoole\Table::count — Count the rows in the table, or count all the elements in the table if $mode = 1.
  - Swoole\Table::create — Create the swoole memory table.
  - Swoole\Table::current — Get the current row.
  - Swoole\Table::decr — Decrement the value in the Swoole table by $key and $column
  - Swoole\Table::del — Delete a row in the Swoole table by $key
  - Swoole\Table::destroy — Destroy the Swoole table.
  - Swoole\Table::exist — Check if a row is existed by $row_key.
  - Swoole\Table::get — Get the value in the Swoole table by $key and $field.
  - Swoole\Table::incr — Increment the value by $key and $column
  - Swoole\Table::key — Get the key of current row.
  - Swoole\Table::next — Iterator the next row
  - Swoole\Table::rewind — Rewind the iterator.
  - Swoole\Table::set — Update a row of the table by $key.
  - Swoole\Table::valid — Check if the current row is valid.
- Swoole\Timer — The Swoole\Timer class
  - Swoole\Timer::after — Trigger a callback function after a period of time.
  - Swoole\Timer::clear — Delete a timer by timer ID.
  - Swoole\Timer::exists — Check if a timer is existed.
  - Swoole\Timer::tick — Repeats a given function at every given time-interval.
- Swoole\WebSocket\Frame — The Swoole\WebSocket\Frame class
- Swoole\WebSocket\Server — The Swoole\WebSocket\Server class
  - Swoole\WebSocket\Server::exist — Check if the file descriptor exists.
  - Swoole\WebSocket\Server::on — Register event callback function
  - Swoole\WebSocket\Server::pack — Get a pack of binary data to send in a single frame.
  - Swoole\WebSocket\Server::push — Push data to the remote client.
  - Swoole\WebSocket\Server::unpack — Unpack the binary data received from the client.

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open