全量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
- Process
- Process\Pool
- AsyncIO
- Memory
- HttpServer
- WebSocket
- 协程 Server
- 协程 Client
- 协程 Socket
- 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_file
-
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 Process
-
4.12 swoole_process->push
-
4.13 swoole_process->pop
-
4.15 swoole_process->exit
-
4.16 swoole_process::kill
-
4.17 swoole_process::wait
-
-
5.2 Process\Pool->on
-
6 AsyncIO
-
6.1 异步文件系统IO
6.1.1
swoole_async_readfile6.1.2
swoole_async_writefile6.1.3
swoole_async_read6.1.4
swoole_async_write6.1.5
swoole_async_dns_lookup6.1.6
swoole_async::exec
-
6.2 EventLoop
6.2.1
swoole_event_add6.2.2
swoole_event_set6.2.3
swoole_event_isset6.2.4
swoole_event_write6.2.5
swoole_event_del6.2.6
swoole_event_exit6.2.7
swoole_event_defer6.2.8
swoole_event_cycle6.2.9
swoole_event_wait6.2.10
swoole_event_dispatch
-
6.3 异步毫秒定时器
6.3.1
swoole_timer_tick6.3.2
swoole_timer_after6.3.3
swoole_timer_clear
-
6.4 异步MySQL客户端
6.4.1
swoole_mysql->construct6.4.2
swoole_mysql->on6.4.3
swoole_mysql->connect6.4.4
swoole_mysql->escape6.4.5
swoole_mysql->query6.4.6
swoole_mysql->begin6.4.7
swoole_mysql->commit6.4.8
swoole_mysql->rollback6.4.9
swoole_mysql->close
-
6.5 异步Redis客户端
6.5.1
swoole_redis->__construct6.5.2
swoole_redis->on6.5.3
swoole_redis->connect6.5.4
swoole_redis->__call6.5.5
swoole_redis->close
-
6.6.1
swoole_http_client->__construct6.6.2
swoole_http_client->set6.6.3
swoole_http_client->setMethod6.6.4
swoole_http_client->setHeaders6.6.5
swoole_http_client->setCookies6.6.6
swoole_http_client->setData6.6.7
swoole_http_client->addFile6.6.8
swoole_http_client->get6.6.9
swoole_http_client->post6.6.10
swoole_http_client->upgrade6.6.11
swoole_http_client->push6.6.12
swoole_http_client->execute6.6.13
swoole_http_client->download6.6.14
swoole_http_client->close
-
6.7 异步Http2.0客户端
-
-
7 Memory
-
7.1 Lock
7.1.1
swoole_lock->__construct7.1.2
swoole_lock->lock7.1.3
swoole_lock->trylock7.1.4
swoole_lock->unlock7.1.5
swoole_lock->lock_read7.1.6
swoole_lock->trylock_read7.1.7
swoole_lock->lockwait
-
7.2 Buffer
7.2.1
swoole_buffer->__construct7.2.2
swoole_buffer->append7.2.3
swoole_buffer->substr7.2.4
swoole_buffer->clear7.2.5
swoole_buffer->expand7.2.6
swoole_buffer->write7.2.7
swoole_buffer->read7.2.8
swoole_buffer->recycle
-
7.3 Table
7.3.1
swoole_table->__construct7.3.2
swoole_table->column7.3.3
swoole_table->create7.3.4
swoole_table->set7.3.5
swoole_table->incr7.3.6
swoole_table->decr7.3.7
swoole_table->get7.3.8
swoole_table->exist7.3.9
swoole_table->del7.3.10
常量列表
-
7.4 Atomic
7.4.1
swoole_atomic->__construct7.4.2
swoole_atomic->add7.4.3
swoole_atomic->sub7.4.4
swoole_atomic->get7.4.5
swoole_atomic->set7.4.6
swoole_atomic->cmpset7.4.7
swoole_atomic->wait7.4.8
swoole_atomic->wakeup
-
7.5 mmap
7.5.1
swoole_mmap::open
-
7.6 Channel
7.6.1
Channel->__construct7.6.2
Channel->push7.6.3
Channel->pop7.6.4
Channel->stats
-
7.7 Serialize
7.7.1
swoole_serialize::pack7.7.2
swoole_serialize::unpack
-
-
-
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 协程 Server
-
10.1 方法列表
10.1.1
getDefer10.1.2
setDefer10.1.3
recv10.1.4
Coroutine::create10.1.5
Coroutine::getuid
-
10.2 并发调用
10.2.1
使用实例
-
10.3 实现原理
-
10.4 常见问题
-
10.5 编程须知
10.5.1
在多个协程间共用同一个协程客户端10.5.2
禁止使用协程 API 的场景 ( ver < 2.2 )10.5.3
使用类静态变量/全局变量保存上下文
-
-
11 协程 Client
-
11.1 Coroutine\Client
11.1.1
Coroutine\Client->connect11.1.2
Coroutine\Client->send11.1.3
Coroutine\Client->recv11.1.4
Coroutine\Client->close11.1.5
Coroutine\Client->peek
-
11.2.1
属性列表11.2.2
Coroutine\Http\Client->get11.2.3
Coroutine\Http\Client->post11.2.4
Coroutine\Http\Client->upgrade11.2.5
Coroutine\Http\Client->push11.2.6
Coroutine\Http\Client->recv11.2.7
Coroutine\Http\Client->addFile
-
11.3.1
Coroutine\Http2\Client->__construct11.3.2
Coroutine\Http2\Client->set11.3.3
Coroutine\Http2\Client->connect11.3.4
Coroutine\Http2\Client->send11.3.5
Coroutine\Http2\Client->write11.3.6
Coroutine\Http2\Client->recv11.3.7
Coroutine\Http2\Client->close
-
11.4 Coroutine\Redis
-
11.5 Coroutine\MySQL
11.5.1
属性列表11.5.2
Coroutine\MySQL->connect11.5.3
Coroutine\MySQL->query11.5.4
Coroutine\MySQL->prepare11.5.5
Coroutine\MySQL\Statement->execute
-
11.6 Coroutine\Util
11.6.1
Coroutine::getUid11.6.2
Coroutine::create11.6.3
Coroutine::resume11.6.4
Coroutine::suspend11.6.5
Coroutine::fread11.6.6
Coroutine::fgets11.6.7
Coroutine::fwrite11.6.8
Coroutine::sleep11.6.9
Coroutine::gethostbyname11.6.10
Coroutine::getaddrinfo11.6.11
Coroutine::call_user_func11.6.12
Coroutine::call_user_func_array11.6.13
Coroutine::exec11.6.14
Coroutine::readFile11.6.15
Coroutine::writeFIle
-
11.7 Coroutine\Channel
11.7.1
Coroutine\Channel->__construct11.7.2
Coroutine\Channel->push11.7.3
Coroutine\Channel->pop11.7.4
Coroutine\Channel->stats11.7.5
Coroutine\Channel->close11.7.6
Coroutine\Channel::select
-
11.8 Coroutine\PostgreSQL
11.8.1
Coroutine\PostgreSQL->connect11.8.2
Coroutine\PostgreSQL->query11.8.3
Coroutine\PostgreSQL->fetchAll11.8.4
Coroutine\PostgreSQL->affectedRows11.8.5
Coroutine\PostgreSQL->numRows11.8.6
Coroutine\PostgreSQL->fetchObject11.8.7
Coroutine\PostgreSQL->fetchAssoc11.8.8
Coroutine\PostgreSQL->fetchArray11.8.9
Coroutine\PostgreSQL->fetchRow11.8.10
Coroutine\PostgreSQL->metaData
-
-
12 协程 Socket
-
12.12 Coroutine\Socket->close
-
13 Redis\Server
-
13.1 方法
13.1.1
setHandler13.1.2
format
-
13.2 常量
-
-
14 高级
-
14.1 Swoole的实现
-
14.2 Reactor线程
-
14.3 Manager进程
-
14.4 Worker进程
-
14.6 Task/Finish特性的用途
-
14.8 Swoole异步与同步的选择
-
14.9 TCP/UDP压测工具
-
14.10 swoole服务器如何做到无人值守100%可用
-
14.11 MySQL的连接池、异步、断线重连
-
14.12 PHP中哪些函数是同步阻塞的
-
14.13 守护进程程序常用数据结构
14.13.1
队列(Queue)14.13.2
堆(Heap)14.13.3
定长数组(SplFixedArray)
-
14.14 使用jemalloc优化swoole内存分配性能
-
14.15 C开发者如何使用Swoole
-
14.16 C++开发者如何使用Swoole
-
14.17 使用systemd管理swoole服务
-
14.18 网卡中断设置
-
14.19 将Swoole静态编译内嵌到PHP
-
14.20 异步回调程序内存管理
-
-
15 其他
-
15.1 函数列表
15.1.1
swoole_set_process_name15.1.2
swoole_version15.1.3
swoole_strerror15.1.4
swoole_errno15.1.5
swoole_get_local_ip15.1.6
swoole_clear_dns_cache15.1.7
swoole_get_local_mac15.1.8
swoole_cpu_num
-
15.2 Swoole社区
-
15.3 捐赠Swoole项目
-
15.4 加入Swoole开发组
-
15.5 附录:Linux信号列表
-
15.7 附录:TCP连接的状态
-
15.8 附录:tcpdump抓包工具的使用
-
15.9 附录:strace工具的使用
-
15.10 附录:gdb工具的使用
-
15.11 附录:lsof工具的使用
-
15.12 附录:perf工具的使用
-
15.13 附录:编译PHP扩展的相关工具
-
15.14 备用:已移除的历史特性
15.14.1
swoole_server->handler15.14.2
task_worker_max15.14.3
swoole_server->addtimer15.14.4
swoole_server->deltimer15.14.5
onTimer15.14.6
swoole_timer_add15.14.7
swoole_timer_del15.14.8
swoole_get_mysqli_sock15.14.9
swoole_mysql_query15.14.10
onMasterConnect15.14.11
onMasterClose15.14.12
Nginx/Golang/Swoole/Node.js的性能对比
-
15.15 历史:版本更新记录(1.x)
15.15.1
1.9.1915.15.2
1.9.1815.15.3
1.9.1715.15.4
1.9.1615.15.5
1.9.1515.15.6
1.9.1415.15.7
1.9.1215.15.8
1.9.1115.15.9
1.9.915.15.10
1.9.715.15.11
1.9.615.15.12
1.9.515.15.13
1.9.415.15.14
1.9.315.15.15
1.9.215.15.16
1.9.115.15.17
1.9.015.15.18
1.8.1315.15.19
1.8.1215.15.20
1.8.1115.15.21
1.8.1015.15.22
1.8.915.15.23
1.8.815.15.24
1.8.715.15.25
1.8.615.15.26
1.8.515.15.27
1.8.415.15.28
1.8.315.15.29
1.8.215.15.30
1.8.115.15.31
1.8.015.15.32
1.7.2215.15.33
1.7.2115.15.34
1.7.2015.15.35
1.7.1915.15.36
1.7.1815.15.37
1.7.1715.15.38
1.7.1615.15.39
1.7.1515.15.40
1.7.1415.15.41
1.7.1315.15.42
1.7.1215.15.43
1.7.1115.15.44
1.7.1015.15.45
1.7.915.15.46
1.7.815.15.47
1.7.715.15.48
1.7.615.15.49
1.7.515.15.50
v1.515.15.51
v1.615.15.52
v1.7
-
15.16 历史:版本更新记录(2.x)
15.16.1
2.0.1-Alpha15.16.2
2.0.515.16.3
2.0.915.16.4
2.0.10
-