全量MarkDown版本
PHP的异步、并行、高性能网络通信引擎,使用纯C语言编写,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,异步Redis,数据库连接池,AsyncTask,消息队列,毫秒定时器,异步文件读写,异步DNS查询。 Swoole内置了Http/WebSocket服务器端/客户端、Http2.0服务器端/客户端。
Swoole底层内置了异步非阻塞、多线程的网络IO服务器。PHP程序员仅需处理事件回调即可,无需关心底层。与Nginx
/Tornado
/Node.js
等全异步的框架不同,Swoole既支持全异步,也支持同步。
除了异步IO的支持之外,Swoole为PHP多进程的模式设计了多个并发数据结构和IPC通信机制,可以大大简化多进程并发编程的工作。其中包括了并发原子计数器,并发HashTable,Channel,Lock,进程间通信IPC等丰富的功能特性。
Swoole从2.0版本开始支持了内置协程,可以使用完全同步的代码实现异步程序。PHP代码无需额外增加任何关键词,底层自动进行协程调度,实现异步。
Swoole可以广泛应用于互联网、移动通信、企业软件、网络游戏、物联网、车联网、智能家庭等领域。 使用PHP+Swoole
作为网络通信框架,可以使企业IT研发团队的效率大大提升,更加专注于开发创新产品。
Swoole是开源免费的自由软件,授权协议是Apache2.0
。企业和个人开发者均可免费使用Swoole的代码,并且在Swoole之上所作的修改可用于商业产品,无需开源(注:必须保留原作者的版权声明)。
1.8.7
或更高版本已完全兼容PHP7
2.0.12
版本开始不再支持PHP5
- 入门指引
- Server
- Client
- Coroutine
- AsyncIO
- Memory
- Process
- HttpServer
- WebSocket
- Process\Pool
- Redis\Server
- 高级
- 其他
-
1 入门指引
-
1.1 环境依赖
-
1.2 编译安装
-
1.3 快速起步
1.3.1
创建TCP服务器1.3.2
创建UDP服务器1.3.3
创建Web服务器1.3.4
创建WebSocket服务器1.3.5
设置定时器1.3.6
执行异步任务1.3.7
创建同步TCP客户端1.3.8
创建异步TCP客户端1.3.9
网络通信协议设计1.3.10
使用异步客户端1.3.11
多进程共享数据
-
1.4 编程须知
1.4.1
sleep/usleep的影响1.4.2
exit/die函数的影响1.4.3
while循环的影响1.4.4
stat缓存清理1.4.5
mt_rand随机数
-
1.5 版本更新记录
-
1.6 新特性使用
1.6.1
2.1.2 进程池模块的使用1.6.2
1.9.24 调度支持 Stream 模式1.6.3
1.9.24 异步客户端自动解析域名1.6.4
1.9.17 支持异步安全重启特性1.6.5
1.9.14 使用异步客户端超时机制1.6.6
1.8.0 使用内置Http异步客户端1.6.7
1.7.16 使用迭代器遍历Server所有连接1.6.8
1.7.5 在Server中使用swoole_table1.6.9
1.7.5 swoole_client支持sendfile接口1.6.10
1.7.4 SSL隧道加密TCP-Server1.6.11
1.7.4 task进程中使用毫秒定时器1.6.12
1.7.3 固定包头+包体协议自动分包1.6.13
1.7.3 onTask直接return取代finish函数1.6.14
1.7.2 swoole_process多进程模块的使用1.6.15
1.7.2 task进程使用消息队列
-
1.7 项目路线图
-
1.8 php.ini选项
-
1.9 内核参数调整
-
1.11 衍生开源项目
-
1.12 用户与案例
1.12.1
物联网项目1.12.2
网络游戏1.12.3
腾讯(Tencent)1.12.4
百度(Baidu.com)1.12.5
阅文集团1.12.6
BiliBili(哔哩哔哩)1.12.7
车轮互联(chelun.com)1.12.8
(捞月狗) 游戏社区
-
1.13 提交错误报告
-
1.14 常见问题
1.14.1
升级swoole版本的常见问题1.14.2
生成可分发的二进制swoole版本1.14.3
在phpinfo中有在php-m中没有1.14.4
Connection refused是怎么回事1.14.5
Resource temporarily unavailable [11]1.14.6
Cannot assign requested address [99]1.14.7
swoole与node.js相比有哪些优势1.14.8
swoole与golang相比有哪些优势1.14.9
pcre.h: No such file or directory1.14.10
my_global.h: No such file or directory1.14.11
undefined symbol: __sync_bool_compare_and_swap_41.14.12
学习Swoole需要掌握哪些基础知识1.14.13
同步阻塞与异步非阻塞适用场景1.14.14
PHP7环境下出现zend_mm_heap corrupted1.14.15
swoole项目起源和名字由来
-
-
2 Server
-
2.1 函数列表
2.1.1
swoole_server::__construct2.1.2
swoole_server->set2.1.3
swoole_server->on2.1.4
swoole_server->addListener2.1.5
swoole_server->addProcess2.1.6
swoole_server->listen2.1.7
swoole_server->start2.1.8
swoole_server->reload2.1.9
swoole_server->stop2.1.10
swoole_server->shutdown2.1.11
swoole_server->tick2.1.12
swoole_server->after2.1.13
swoole_server->defer2.1.14
swoole_server->clearTimer2.1.15
swoole_server->close2.1.16
swoole_server->send2.1.17
swoole_server->sendfile2.1.18
swoole_server->sendto2.1.19
swoole_server->sendwait2.1.20
swoole_server->sendMessage2.1.21
swoole_server->exist2.1.22
swoole_server->pause2.1.23
swoole_server->resume2.1.24
swoole_server->getClientInfo2.1.25
swoole_server->getClientList2.1.26
swoole_server->bind2.1.27
swoole_server->stats2.1.28
swoole_server->task2.1.29
swoole_server->taskwait2.1.30
swoole_server->taskWaitMulti2.1.31
swoole_server->taskCo2.1.32
swoole_server->finish2.1.33
swoole_server->heartbeat2.1.34
swoole_server->getLastError2.1.35
swoole_server->getSocket2.1.36
swoole_server->protect2.1.37
swoole_server->confirm
-
2.2 属性列表
2.2.1
swoole_server::$setting2.2.2
swoole_server::$master_pid2.2.3
swoole_server::$manager_pid2.2.4
swoole_server::$worker_id2.2.5
swoole_server::$worker_pid2.2.6
swoole_server::$taskworker2.2.7
swoole_server::$connections2.2.8
swoole_server::$ports
-
2.3 配置选项
2.3.1
reactor_num2.3.2
worker_num2.3.3
max_request2.3.4
max_conn (max_connection)2.3.5
task_worker_num2.3.6
task_ipc_mode2.3.7
task_max_request2.3.8
task_tmpdir2.3.9
dispatch_mode2.3.10
dispatch_func2.3.11
message_queue_key2.3.12
daemonize2.3.13
backlog2.3.14
log_file2.3.15
log_level2.3.16
heartbeat_check_interval2.3.17
heartbeat_idle_time2.3.18
open_eof_check2.3.19
open_eof_split2.3.20
package_eof2.3.21
open_length_check2.3.22
package_length_type2.3.23
package_length_func2.3.24
package_max_length2.3.25
open_cpu_affinity2.3.26
cpu_affinity_ignore2.3.27
open_tcp_nodelay2.3.28
tcp_defer_accept2.3.29
ssl_cert_file2.3.30
ssl_method2.3.31
ssl_ciphers2.3.32
user2.3.33
group2.3.34
chroot2.3.35
pid_file2.3.36
pipe_buffer_size2.3.37
buffer_output_size2.3.38
socket_buffer_size2.3.39
enable_unsafe_event2.3.40
discard_timeout_request2.3.41
enable_reuse_port2.3.42
enable_delay_receive2.3.43
open_http_protocol2.3.44
open_http2_protocol2.3.45
open_websocket_protocol2.3.46
open_mqtt_protocol2.3.47
reload_async2.3.48
tcp_fastopen2.3.49
request_slowlog_file2.3.50
enable_coroutine
-
2.4 监听端口
-
2.5 预定义常量
-
2.6 事件回调函数
2.6.1
onStart2.6.2
onShutdown2.6.3
onWorkerStart2.6.4
onWorkerStop2.6.5
onWorkerExit2.6.6
onConnect2.6.7
onReceive2.6.8
onPacket2.6.9
onClose2.6.10
onBufferFull2.6.11
onBufferEmpty2.6.12
onTask2.6.13
onFinish2.6.14
onPipeMessage2.6.15
onWorkerError2.6.16
onManagerStart2.6.17
onManagerStop
-
2.7 高级特性
2.7.1
改变Worker进程的用户/组2.7.2
回调函数中的 reactor_id 和 fd2.7.3
Length_Check 和 EOF_Check 的使用2.7.4
Worker与Reactor通信模式2.7.5
TCP-Keepalive死连接检测2.7.6
TCP服务器心跳维持方案2.7.7
多端口监听的使用2.7.8
捕获Server运行期致命错误2.7.9
swoole_server的两种运行模式介绍2.7.10
swoole_server中对象的4层生命周期2.7.11
在worker进程内监听一个Server端口2.7.12
在php-fpm/apache中使用task功能
-
2.8 常见问题
2.8.1
为什么不要send完后立即close2.8.2
如何在回调函数中访问外部的变量2.8.3
swoole_server中内存管理机制2.8.4
是否可以共用1个redis或mysql连接2.8.5
关于onConnect/onReceive/onClose顺序2.8.6
4种PHP回调函数风格2.8.7
不同的Server程序实例间如何通信2.8.8
错误信息:ERROR (9006)2.8.9
eventLoop has already been created. unable to create swoole_server
-
2.9 压力测试
2.9.1
并发10万TCP连接的测试2.9.2
PHP7+Swoole/Nginx/Golang性能对比
-
-
3 Client
-
3.1 方法列表
3.1.1
swoole_client::__construct3.1.2
swoole_client->set3.1.3
swoole_client->on3.1.4
swoole_client->connect3.1.5
swoole_client->isConnected3.1.6
swoole_client->getSocket3.1.7
swoole_client->getSockName3.1.8
swoole_client->getPeerName3.1.9
swoole_client->getPeerCert3.1.10
swoole_client->send3.1.11
swoole_client->sendto3.1.12
swoole_client->sendfile3.1.13
swoole_client->recv3.1.14
swoole_client->close3.1.15
swoole_client->sleep3.1.16
swoole_client->wakeup3.1.17
swoole_client->enableSSL
-
3.2 回调函数
3.2.1
onConnect3.2.2
onError3.2.3
onReceive3.2.4
onClose3.2.5
onBufferFull3.2.6
onBufferEmpty
-
3.3 属性列表
3.3.1
swoole_client->errCode3.3.2
swoole_client->sock3.3.3
swoole_client->reuse
-
3.4 并行
3.4.1
swoole_client_select3.4.2
TCP客户端异步连接3.4.3
SWOOLE_KEEP建立TCP长连接
-
3.5 常量
-
3.6 配置选项
3.6.1
ssl_verify_peer3.6.2
ssl_host_name3.6.3
ssl_cafile3.6.4
ssl_capath3.6.5
package_length_func
-
3.7 常见问题
-
-
-
4.1 Coroutine
4.1.1
Coroutine::getuid4.1.2
Coroutine::create4.1.3
Coroutine::resume4.1.4
Coroutine::suspend4.1.5
Coroutine::fread4.1.6
Coroutine::fgets4.1.7
Coroutine::fwrite4.1.8
Coroutine::sleep4.1.9
Coroutine::gethostbyname4.1.10
Coroutine::getaddrinfo4.1.11
Coroutine::exec4.1.12
Coroutine::readFile4.1.13
Coroutine::writeFile4.1.14
Coroutine::stats
-
4.2.1
Coroutine\Channel->__construct4.2.2
Coroutine\Channel->push4.2.3
Coroutine\Channel->pop4.2.4
Coroutine\Channel->stats4.2.5
Coroutine\Channel->close4.2.6
Coroutine\Channel::select
-
4.3 Coroutine\Client
4.3.1
Coroutine\Client->connect4.3.2
Coroutine\Client->send4.3.3
Coroutine\Client->recv4.3.4
Coroutine\Client->close4.3.5
Coroutine\Client->peek
-
4.4.1
属性列表4.4.2
Coroutine\Http\Client->get4.4.3
Coroutine\Http\Client->post4.4.4
Coroutine\Http\Client->upgrade4.4.5
Coroutine\Http\Client->push4.4.6
Coroutine\Http\Client->recv4.4.7
Coroutine\Http\Client->addFile4.4.8
Coroutine\Http\Client->download
-
4.6 Coroutine\Redis
-
4.7 Coroutine\Socket
4.7.1
Coroutine\Socket::__construct4.7.2
Coroutine\Socket->bind4.7.3
Coroutine\Socket->listen4.7.4
Coroutine\Socket->accept4.7.5
Coroutine\Socket->connect4.7.6
Coroutine\Socket->send4.7.7
Coroutine\Socket->recv4.7.8
Coroutine\Socket->sendto4.7.9
Coroutine\Socket->recvfrom4.7.10
Coroutine\Socket->getsockname4.7.11
Coroutine\Socket->getpeername4.7.12
Coroutine\Socket->close
-
4.8 Coroutine\MySQL
4.8.1
属性列表4.8.2
Coroutine\MySQL->connect4.8.3
Coroutine\MySQL->query4.8.4
Coroutine\MySQL->prepare4.8.5
Coroutine\MySQL\Statement->execute4.8.6
Coroutine\MySQL\Statement->fetch4.8.7
Coroutine\MySQL\Statement->fetchAll4.8.8
Coroutine\MySQL\Statement->nextResult
-
4.9.1
Coroutine\PostgreSQL->connect4.9.2
Coroutine\PostgreSQL->query4.9.3
Coroutine\PostgreSQL->fetchAll4.9.4
Coroutine\PostgreSQL->affectedRows4.9.5
Coroutine\PostgreSQL->numRows4.9.6
Coroutine\PostgreSQL->fetchObject4.9.7
Coroutine\PostgreSQL->fetchAssoc4.9.8
Coroutine\PostgreSQL->fetchArray4.9.9
Coroutine\PostgreSQL->fetchRow4.9.10
Coroutine\PostgreSQL->metaData
-
4.10 Server
-
4.11 并发调用
-
4.12 实现原理
-
4.13 常见问题
-
4.14 编程须知
4.14.1
在多个协程间共用同一个协程客户端4.14.2
禁止使用协程 API 的场景4.14.3
使用类静态变量/全局变量保存上下文
-
-
5 AsyncIO
-
5.1 异步文件系统IO
5.1.1
swoole_async_readfile5.1.2
swoole_async_writefile5.1.3
swoole_async_read5.1.4
swoole_async_write5.1.5
swoole_async_dns_lookup5.1.6
swoole_async::exec
-
5.2 EventLoop
5.2.1
swoole_event_add5.2.2
swoole_event_set5.2.3
swoole_event_isset5.2.4
swoole_event_write5.2.5
swoole_event_del5.2.6
swoole_event_exit5.2.7
swoole_event_defer5.2.8
swoole_event_cycle5.2.9
swoole_event_wait5.2.10
swoole_event_dispatch
-
5.3 异步毫秒定时器
5.3.1
swoole_timer_tick5.3.2
swoole_timer_after5.3.3
swoole_timer_clear
-
5.4 异步MySQL客户端
5.4.1
swoole_mysql->construct5.4.2
swoole_mysql->on5.4.3
swoole_mysql->connect5.4.4
swoole_mysql->escape5.4.5
swoole_mysql->query5.4.6
swoole_mysql->begin5.4.7
swoole_mysql->commit5.4.8
swoole_mysql->rollback5.4.9
swoole_mysql->close
-
5.5 异步Redis客户端
5.5.1
swoole_redis->__construct5.5.2
swoole_redis->on5.5.3
swoole_redis->connect5.5.4
swoole_redis->__call5.5.5
swoole_redis->close
-
5.6.1
swoole_http_client->__construct5.6.2
swoole_http_client->set5.6.3
swoole_http_client->setMethod5.6.4
swoole_http_client->setHeaders5.6.5
swoole_http_client->setCookies5.6.6
swoole_http_client->setData5.6.7
swoole_http_client->addFile5.6.8
swoole_http_client->get5.6.9
swoole_http_client->post5.6.10
swoole_http_client->upgrade5.6.11
swoole_http_client->push5.6.12
swoole_http_client->execute5.6.13
swoole_http_client->download5.6.14
swoole_http_client->close
-
5.7 异步Http2.0客户端
-
-
6 Memory
-
6.1 Lock
6.1.1
swoole_lock->__construct6.1.2
swoole_lock->lock6.1.3
swoole_lock->trylock6.1.4
swoole_lock->unlock6.1.5
swoole_lock->lock_read6.1.6
swoole_lock->trylock_read6.1.7
swoole_lock->lockwait
-
6.2 Buffer
6.2.1
swoole_buffer->__construct6.2.2
swoole_buffer->append6.2.3
swoole_buffer->substr6.2.4
swoole_buffer->clear6.2.5
swoole_buffer->expand6.2.6
swoole_buffer->write6.2.7
swoole_buffer->read6.2.8
swoole_buffer->recycle
-
6.3 Table
6.3.1
swoole_table->__construct6.3.2
swoole_table->column6.3.3
swoole_table->create6.3.4
swoole_table->set6.3.5
swoole_table->incr6.3.6
swoole_table->decr6.3.7
swoole_table->get6.3.8
swoole_table->exist6.3.9
swoole_table->del6.3.10
常量列表6.3.11
swoole_table->count
-
6.4 Atomic
6.4.1
swoole_atomic->__construct6.4.2
swoole_atomic->add6.4.3
swoole_atomic->sub6.4.4
swoole_atomic->get6.4.5
swoole_atomic->set6.4.6
swoole_atomic->cmpset6.4.7
swoole_atomic->wait6.4.8
swoole_atomic->wakeup
-
6.5 mmap
6.5.1
swoole_mmap::open
-
6.6 Channel
6.6.1
Channel->__construct6.6.2
Channel->push6.6.3
Channel->pop6.6.4
Channel->stats
-
6.7 Serialize
6.7.1
swoole_serialize::pack6.7.2
swoole_serialize::unpack
-
-
7 Process
-
7.12 swoole_process->push
-
7.13 swoole_process->pop
-
7.15 swoole_process->exit
-
7.16 swoole_process::kill
-
7.17 swoole_process::wait
-
-
8.1.1
swoole_http_server->on8.1.2
swoole_http_server->start
-
8.3.1
swoole_http_response->header8.3.2
swoole_http_response->cookie8.3.3
swoole_http_response->status8.3.4
swoole_http_response->gzip8.3.5
swoole_http_response->redirect8.3.6
swoole_http_response->write8.3.7
swoole_http_response->sendfile8.3.8
swoole_http_response->end8.3.9
swoole_http_response->detach8.3.10
swoole_http_response::create
-
8.4 配置选项
8.4.1
upload_tmp_dir8.4.2
http_parse_post8.4.3
document_root
-
8.5 常见问题
8.5.1
CURL发送POST请求服务器端超时8.5.2
使用Chrome访问服务器会产生2次请求8.5.3
GET/POST请求的最大尺寸
-
-
10 Process\Pool
-
10.2 Process\Pool->on
-
10.3 Process\Pool->listen
-
10.4 Process\Pool->write
-
10.5 Process\Pool->start
-
11 Redis\Server
-
11.1 方法
11.1.1
setHandler11.1.2
format
-
11.2 常量
-
-
12 高级
-
12.1 Swoole的实现
-
12.2 Reactor线程
-
12.3 Manager进程
-
12.4 Worker进程
-
12.6 Task/Finish特性的用途
-
12.8 Swoole异步与同步的选择
-
12.9 TCP/UDP压测工具
-
12.10 swoole服务器如何做到无人值守100%可用
-
12.11 MySQL的连接池、异步、断线重连
-
12.12 PHP中哪些函数是同步阻塞的
-
12.13 守护进程程序常用数据结构
12.13.1
队列(Queue)12.13.2
堆(Heap)12.13.3
定长数组(SplFixedArray)
-
12.14 使用jemalloc优化swoole内存分配性能
-
12.15 C开发者如何使用Swoole
-
12.16 C++开发者如何使用Swoole
-
12.17 使用systemd管理swoole服务
-
12.18 网卡中断设置
-
12.19 将Swoole静态编译内嵌到PHP
-
12.20 异步回调程序内存管理
-
12.21 日志等级控制
-
12.22 使用 asan 内存检测
-
-
13 其他
-
13.1 函数列表
13.1.1
swoole_set_process_name13.1.2
swoole_version13.1.3
swoole_strerror13.1.4
swoole_errno13.1.5
swoole_get_local_ip13.1.6
swoole_clear_dns_cache13.1.7
swoole_get_local_mac13.1.8
swoole_cpu_num
-
13.3 捐赠Swoole项目
-
13.4 加入Swoole开发组
-
13.5 附录:Linux信号列表
-
13.7 附录:TCP连接的状态
-
13.8 附录:tcpdump抓包工具的使用
-
13.9 附录:strace工具的使用
-
13.10 附录:gdb工具的使用
-
13.11 附录:lsof工具的使用
-
13.12 附录:perf工具的使用
-
13.13 附录:编译PHP扩展的相关工具
-
13.14 备用:已移除的历史特性
13.14.1
swoole_server->handler13.14.2
task_worker_max13.14.3
swoole_server->addtimer13.14.4
swoole_server->deltimer13.14.5
onTimer13.14.6
swoole_timer_add13.14.7
swoole_timer_del13.14.8
swoole_get_mysqli_sock13.14.9
swoole_mysql_query13.14.10
onMasterConnect13.14.11
onMasterClose13.14.12
Nginx/Golang/Swoole/Node.js的性能对比13.14.13
Coroutine::call_user_func13.14.14
Coroutine::call_user_func_array
-
13.15 历史:版本更新记录(1.x)
13.15.1
1.10.213.15.2
1.10.113.15.3
1.10.013.15.4
1.9.2313.15.5
1.9.2213.15.6
1.9.1913.15.7
1.9.1813.15.8
1.9.1713.15.9
1.9.1613.15.10
1.9.1513.15.11
1.9.1413.15.12
1.9.1213.15.13
1.9.1113.15.14
1.9.913.15.15
1.9.713.15.16
1.9.613.15.17
1.9.513.15.18
1.9.413.15.19
1.9.313.15.20
1.9.213.15.21
1.9.113.15.22
1.9.013.15.23
1.8.1313.15.24
1.8.1213.15.25
1.8.1113.15.26
1.8.1013.15.27
1.8.913.15.28
1.8.813.15.29
1.8.713.15.30
1.8.613.15.31
1.8.513.15.32
1.8.413.15.33
1.8.313.15.34
1.8.213.15.35
1.8.113.15.36
1.8.013.15.37
1.7.2213.15.38
1.7.2113.15.39
1.7.2013.15.40
1.7.1913.15.41
1.7.1813.15.42
1.7.1713.15.43
1.7.1613.15.44
1.7.1513.15.45
1.7.1413.15.46
1.7.1313.15.47
1.7.1213.15.48
1.7.1113.15.49
1.7.1013.15.50
1.7.913.15.51
1.7.813.15.52
1.7.713.15.53
1.7.613.15.54
1.7.513.15.55
v1.513.15.56
v1.613.15.57
v1.7
-
13.16 历史:版本更新记录(2.x)
-