Swoole中文文档
全量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
- Coroutine
- Runtime
- Timer
- Memory
- Http\Server
- WebSocket\Server
- Redis\Server
- Process
- Process\Pool
- Client
- Event
- 高级
- 其他
全量目录
-
入门指引
1-
环境依赖
1.1 -
编译安装
1.2 -
快速起步
1.31.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.3.12
使用协程客户端1.3.13
协程:并发 shell_exec1.3.14
协程:Go + Chan + Defer1.3.15
协程:实现 Go 语言风格的 defer1.3.16
协程:实现 sync.WaitGroup 功能
-
编程须知
1.41.4.1
sleep/usleep的影响1.4.2
exit/die函数的影响1.4.3
while循环的影响1.4.4
stat缓存清理1.4.5
mt_rand随机数1.4.6
进程隔离
-
版本更新记录
1.5 -
向下不兼容改动
1.6 -
新特性使用
1.71.7.1
4.3.0 在 Process 中使用协程1.7.2
4.3.0 延时事件机制改进1.7.3
2.1.2 进程池模块的使用1.7.4
1.9.24 调度支持 Stream 模式1.7.5
1.9.24 异步客户端自动解析域名1.7.6
1.9.17 支持异步安全重启特性1.7.7
1.9.14 使用异步客户端超时机制1.7.8
1.8.0 使用内置Http异步客户端1.7.9
1.7.16 使用迭代器遍历Server所有连接1.7.10
1.7.5 在Server中使用swoole_table1.7.11
1.7.5 swoole_client支持sendfile接口1.7.12
1.7.4 SSL隧道加密TCP-Server1.7.13
1.7.4 task进程中使用毫秒定时器1.7.14
1.7.3 固定包头+包体协议自动分包1.7.15
1.7.3 onTask直接return取代finish函数1.7.16
1.7.2 swoole_process多进程模块的使用1.7.17
1.7.2 task进程使用消息队列
-
项目路线图
1.8 -
php.ini选项
1.9 -
内核参数调整
1.10 -
衍生开源项目
1.12 -
用户与案例
1.131.13.1
物联网项目1.13.2
网络游戏1.13.3
腾讯(Tencent)1.13.4
百度(Baidu.com)1.13.5
阅文集团1.13.6
BiliBili(哔哩哔哩)1.13.7
车轮互联(chelun.com)1.13.8
(捞月狗) 游戏社区
-
提交错误报告
1.14 -
常见问题
1.151.15.1
升级swoole版本的常见问题1.15.2
生成可分发的二进制swoole版本1.15.3
在phpinfo中有在php -m中没有1.15.4
Connection refused是怎么回事1.15.5
Resource temporarily unavailable [11]1.15.6
Cannot assign requested address [99]1.15.7
swoole与node.js相比有哪些优势1.15.8
swoole与golang相比有哪些优势1.15.9
pcre.h: No such file or directory1.15.10
undefined symbol: __sync_bool_compare_and_swap_41.15.11
学习Swoole需要掌握哪些基础知识1.15.12
同步阻塞与异步非阻塞适用场景1.15.13
PHP7环境下出现zend_mm_heap corrupted1.15.14
Swoole 项目起源和名字由来1.15.15
'__builtin_saddl_overflow' was not declared in this scope
-
-
Server
2-
函数列表
2.12.1.1
Server::__construct2.1.2
Server->set2.1.3
Server->on2.1.4
Server->addListener2.1.5
Server->addProcess2.1.6
Server->listen2.1.7
Server->start2.1.8
Server->reload2.1.9
Server->stop2.1.10
Server->shutdown2.1.11
Server->tick2.1.12
Server->after2.1.13
Server->defer2.1.14
Server->clearTimer2.1.15
Server->close2.1.16
Server->send2.1.17
Server->sendfile2.1.18
Server->sendto2.1.19
Server->sendwait2.1.20
Server->sendMessage2.1.21
Server->exist2.1.22
Server->pause2.1.23
Server->resume2.1.24
Server->getClientInfo2.1.25
Server->getClientList2.1.26
Server->bind2.1.27
Server->stats2.1.28
Server->task2.1.29
Server->taskwait2.1.30
Server->taskWaitMulti2.1.31
Server->taskCo2.1.32
Server->finish2.1.33
Server->heartbeat2.1.34
Server->getLastError2.1.35
Server->getSocket2.1.36
Server->protect2.1.37
Server->confirm
-
属性列表
2.22.2.1
Server::$setting2.2.2
Server::$master_pid2.2.3
Server::$manager_pid2.2.4
Server::$worker_id2.2.5
Server::$worker_pid2.2.6
Server::$taskworker2.2.7
Server::$connections2.2.8
Server::$ports
-
配置选项
2.32.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
open_websocket_close_frame2.3.48
reload_async2.3.49
tcp_fastopen2.3.50
request_slowlog_file2.3.51
enable_coroutine2.3.52
max_coroutine2.3.53
task_enable_coroutine
-
监听端口
2.4 -
预定义常量
2.5 -
事件回调函数
2.62.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.72.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
Server内存管理机制2.7.10
Server的两种运行模式介绍2.7.11
Server中对象的4层生命周期2.7.12
在worker进程内监听一个Server端口2.7.13
在php-fpm/apache中使用task功能
-
常见问题
2.82.8.1
为什么不要send完后立即close2.8.2
如何在回调函数中访问外部的变量2.8.3
是否可以共用1个redis或mysql连接2.8.4
关于onConnect/onReceive/onClose顺序2.8.5
4种PHP回调函数风格2.8.6
不同的Server程序实例间如何通信2.8.7
错误信息:ERROR (9006)2.8.8
eventLoop has already been created. unable to create swoole_server
-
压力测试
2.9
-
-
Coroutine
3-
Coroutine
3.13.1.1
Coroutine::getCid3.1.2
Coroutine::create3.1.3
Coroutine::yield3.1.4
Coroutine::resume3.1.5
Coroutine::defer3.1.6
Coroutine::fread3.1.7
Coroutine::fgets3.1.8
Coroutine::fwrite3.1.9
Coroutine::sleep3.1.10
Coroutine::gethostbyname3.1.11
Coroutine::getaddrinfo3.1.12
Coroutine::exec3.1.13
Coroutine::readFile3.1.14
Coroutine::writeFile3.1.15
Coroutine::stats3.1.16
Coroutine::statvfs3.1.17
Coroutine::getBackTrace3.1.18
Coroutine::listCoroutines3.1.19
Coroutine::set
-
Coroutine\Channel
3.23.2.1
Coroutine\Channel->__construct3.2.2
Coroutine\Channel->push3.2.3
Coroutine\Channel->pop3.2.4
Coroutine\Channel->stats3.2.5
Coroutine\Channel->close3.2.6
Coroutine\Channel->length3.2.7
Coroutine\Channel->isEmpty3.2.8
Coroutine\Channel->isFull3.2.9
Coroutine\Channel->$capacity3.2.10
Coroutine\Channel->$errCode
-
Coroutine\Client
3.33.3.1
Coroutine\Client->connect3.3.2
Coroutine\Client->send3.3.3
Coroutine\Client->recv3.3.4
Coroutine\Client->close3.3.5
Coroutine\Client->peek
-
Coroutine\Http\Client
3.43.4.1
属性列表3.4.2
Coroutine\Http\Client->get3.4.3
Coroutine\Http\Client->post3.4.4
Coroutine\Http\Client->upgrade3.4.5
Coroutine\Http\Client->push3.4.6
Coroutine\Http\Client->recv3.4.7
Coroutine\Http\Client->addFile3.4.8
Coroutine\Http\Client->addData3.4.9
Coroutine\Http\Client->download
-
Coroutine\Http2\Client
3.5 -
Coroutine\Redis
3.63.6.1
Coroutine\Redis::__construct3.6.2
Coroutine\Redis::setOptions3.6.3
属性列表3.6.4
事务模式3.6.5
订阅模式
-
Coroutine\Socket
3.73.7.1
Coroutine\Socket::__construct3.7.2
Coroutine\Socket->bind3.7.3
Coroutine\Socket->listen3.7.4
Coroutine\Socket->accept3.7.5
Coroutine\Socket->connect3.7.6
Coroutine\Socket->send3.7.7
Coroutine\Socket->recv3.7.8
Coroutine\Socket->sendto3.7.9
Coroutine\Socket->recvfrom3.7.10
Coroutine\Socket->getsockname3.7.11
Coroutine\Socket->getpeername3.7.12
Coroutine\Socket->close
-
Coroutine\MySQL
3.83.8.1
属性列表3.8.2
Coroutine\MySQL->connect3.8.3
Coroutine\MySQL->query3.8.4
Coroutine\MySQL->prepare3.8.5
Coroutine\MySQL->escape3.8.6
Coroutine\MySQL\Statement->execute3.8.7
Coroutine\MySQL\Statement->fetch3.8.8
Coroutine\MySQL\Statement->fetchAll3.8.9
Coroutine\MySQL\Statement->nextResult
-
Coroutine\PostgreSQL
3.93.9.1
Coroutine\PostgreSQL->connect3.9.2
Coroutine\PostgreSQL->query3.9.3
Coroutine\PostgreSQL->fetchAll3.9.4
Coroutine\PostgreSQL->affectedRows3.9.5
Coroutine\PostgreSQL->numRows3.9.6
Coroutine\PostgreSQL->fetchObject3.9.7
Coroutine\PostgreSQL->fetchAssoc3.9.8
Coroutine\PostgreSQL->fetchArray3.9.9
Coroutine\PostgreSQL->fetchRow3.9.10
Coroutine\PostgreSQL->metaData
-
Server
3.10 -
并发调用
3.113.11.1
setDefer 机制3.11.2
子协程+通道
-
实现原理
3.12 -
常见问题
3.13 -
编程须知
3.143.14.1
在多个协程间共用同一个协程客户端3.14.2
禁止使用协程 API 的场景(2.x 版本)3.14.3
使用类静态变量/全局变量保存上下文3.14.4
退出协程3.14.5
异常处理
-
扩展组件
3.153.15.1
MongoDB
-
编程调试
3.16
-
-
Runtime
4 -
Timer
5-
swoole_timer_tick
5.1 -
swoole_timer_after
5.2 -
swoole_timer_clear
5.3
-
-
Memory
6-
Lock
6.16.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
-
Buffer
6.26.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
-
Table
6.36.3.1
Table->__construct6.3.2
Table->column6.3.3
Table->create6.3.4
Table->set6.3.5
Table->incr6.3.6
Table->decr6.3.7
Table->get6.3.8
Table->exist6.3.9
Table->count6.3.10
Table->del
-
Atomic
6.46.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
-
mmap
6.56.5.1
swoole_mmap::open
-
Channel
6.66.6.1
Channel->__construct6.6.2
Channel->push6.6.3
Channel->pop6.6.4
Channel->stats
-
Serialize
6.76.7.1
swoole_serialize::pack6.7.2
swoole_serialize::unpack
-
-
Http\Server
7-
Http\Server
7.17.1.1
Http\Server->on7.1.2
Http\Server->start
-
Http\Request
7.27.2.1
Http\Request->$header7.2.2
Http\Request->$server7.2.3
Http\Request->$get7.2.4
Http\Request->$post7.2.5
Http\Request->$cookie7.2.6
Http\Request->$files7.2.7
Http\Request->rawContent7.2.8
Http\Request->getData
-
Http\Response
7.37.3.1
Http\Response->header7.3.2
Http\Response->cookie7.3.3
Http\Response->status7.3.4
Http\Response->gzip7.3.5
Http\Response->redirect7.3.6
Http\Response->write7.3.7
Http\Response->sendfile7.3.8
Http\Response->end7.3.9
Http\Response->detach7.3.10
Http\Response::create
-
配置选项
7.47.4.1
upload_tmp_dir7.4.2
http_parse_post7.4.3
document_root7.4.4
http_compression
-
常见问题
7.57.5.1
CURL发送POST请求服务器端超时7.5.2
使用Chrome访问服务器会产生2次请求7.5.3
GET/POST请求的最大尺寸
-
-
WebSocket\Server
8-
回调函数
8.18.1.1
onHandShake8.1.2
onOpen8.1.3
onMessage
-
函数列表
8.28.2.1
WebSocket\Server->push8.2.2
WebSocket\Server->exist8.2.3
WebSocket\Server::pack8.2.4
WebSocket\Server::unpack8.2.5
WebSocket\Server->disconnect8.2.6
WebSocket\Server->isEstablished
-
预定义常量
8.3 -
常见问题
8.4 -
配置选项
8.5 -
WebSocket\Frame
8.6
-
-
Redis\Server
9-
方法
9.19.1.1
Redis\Server->setHandler9.1.2
Redis\Server::format
-
常量
9.2
-
-
Process
10-
Process::__construct
10.1 -
Process->start
10.2 -
Process->name
10.3 -
Process->exec
10.4 -
Process->write
10.5 -
Process->read
10.6 -
Process->setTimeout
10.7 -
Process->setBlocking
10.8 -
Process->useQueue
10.9 -
Process->statQueue
10.10 -
Process->freeQueue
10.11 -
Process->push
10.12 -
Process->pop
10.13 -
Process->close
10.14 -
Process->exit
10.15 -
Process::kill
10.16 -
Process::wait
10.17 -
Process::daemon
10.18 -
Process::signal
10.19 -
Process::alarm
10.20 -
Process::setAffinity
10.21 -
Process::exportSocket
10.22
-
-
Process\Pool
11-
Process\Pool::__construct
11.1 -
Process\Pool->on
11.2 -
Process\Pool->listen
11.3 -
Process\Pool->write
11.4 -
Process\Pool->start
11.5 -
Process\Pool->getProcess
11.6
-
-
Client
12-
方法列表
12.112.1.1
swoole_client::__construct12.1.2
swoole_client->set12.1.3
swoole_client->on12.1.4
swoole_client->connect12.1.5
swoole_client->isConnected12.1.6
swoole_client->getSocket12.1.7
swoole_client->getSockName12.1.8
swoole_client->getPeerName12.1.9
swoole_client->getPeerCert12.1.10
swoole_client->send12.1.11
swoole_client->sendto12.1.12
swoole_client->sendfile12.1.13
swoole_client->recv12.1.14
swoole_client->close12.1.15
swoole_client->sleep12.1.16
swoole_client->wakeup12.1.17
swoole_client->enableSSL
-
回调函数
12.212.2.1
onConnect12.2.2
onError12.2.3
onReceive12.2.4
onClose12.2.5
onBufferFull12.2.6
onBufferEmpty
-
属性列表
12.312.3.1
swoole_client->errCode12.3.2
swoole_client->sock12.3.3
swoole_client->reuse
-
并行
12.412.4.1
swoole_client_select12.4.2
TCP客户端异步连接12.4.3
SWOOLE_KEEP建立TCP长连接
-
常量
12.5 -
配置选项
12.612.6.1
ssl_verify_peer12.6.2
ssl_host_name12.6.3
ssl_cafile12.6.4
ssl_capath12.6.5
package_length_func12.6.6
http_proxy_host
-
常见问题
12.7
-
-
Event
13-
swoole_event_add
13.1 -
swoole_event_set
13.2 -
swoole_event_isset
13.3 -
swoole_event_write
13.4 -
swoole_event_del
13.5 -
swoole_event_exit
13.6 -
swoole_event_defer
13.7 -
swoole_event_cycle
13.8 -
swoole_event_wait
13.9 -
swoole_event_dispatch
13.10 -
常见问题
13.1113.11.1
epoll_wait 偶尔会用很长时间
-
-
高级
15-
Swoole的实现
15.1 -
Reactor线程
15.2 -
Manager进程
15.3 -
Worker进程
15.4 -
Reactor、Worker、TaskWorker的关系
15.5 -
Task/Finish特性的用途
15.6 -
在php-fpm或apache中使用swoole
15.7 -
Swoole异步与同步的选择
15.8 -
TCP/UDP压测工具
15.9 -
swoole服务器如何做到无人值守100%可用
15.10 -
MySQL的连接池、异步、断线重连
15.11 -
PHP中哪些函数是同步阻塞的
15.12 -
守护进程程序常用数据结构
15.1315.13.1
队列(Queue)15.13.2
堆(Heap)15.13.3
定长数组(SplFixedArray)
-
使用jemalloc优化swoole内存分配性能
15.14 -
C开发者如何使用Swoole
15.15 -
C++开发者如何使用Swoole
15.16 -
使用systemd管理swoole服务
15.17 -
网卡中断设置
15.18 -
将Swoole静态编译内嵌到PHP
15.19 -
异步回调程序内存管理
15.20 -
日志等级控制
15.21 -
使用 asan 内存检测
15.22 -
Windows编译
15.23 -
Swoole协程之旅-前篇
15.24 -
Swoole协程之旅-中篇
15.25 -
Swoole协程之旅-后篇
15.26 -
协程CPU密集场景调度实现
15.27
-
-
其他
16-
函数列表
16.116.1.1
swoole_set_process_name16.1.2
swoole_version16.1.3
swoole_strerror16.1.4
swoole_errno16.1.5
swoole_get_local_ip16.1.6
swoole_clear_dns_cache16.1.7
swoole_get_local_mac16.1.8
swoole_cpu_num16.1.9
swoole_last_error
-
Swoole技术会议
16.3 -
工作组(Working Groups)
16.4 -
参与开源项目指引
16.5 -
捐赠Swoole项目
16.6 -
加入Swoole开发组
16.7 -
非协程特性独立扩展 (swoole_async)
16.8 -
附录:Linux信号列表
16.9 -
附录:Linux错误码(errno)列表
16.10 -
附录:Swoole错误码列表
16.11 -
附录:TCP连接的状态
16.12 -
附录:tcpdump抓包工具的使用
16.13 -
附录:strace工具的使用
16.14 -
附录:gdb工具的使用
16.15 -
附录:lsof工具的使用
16.16 -
附录:perf工具的使用
16.17 -
附录:编译PHP扩展的相关工具
16.18 -
备用:已移除的历史特性
16.1916.19.1
swoole_server->handler16.19.2
task_worker_max16.19.3
swoole_server->addtimer16.19.4
swoole_server->deltimer16.19.5
onTimer16.19.6
swoole_timer_add16.19.7
swoole_timer_del16.19.8
swoole_get_mysqli_sock16.19.9
swoole_mysql_query16.19.10
onMasterConnect16.19.11
onMasterClose16.19.12
Nginx/Golang/Swoole/Node.js的性能对比16.19.13
Coroutine::call_user_func16.19.14
Coroutine::call_user_func_array16.19.15
Coroutine\Channel::select16.19.16
task_async
-
历史:版本更新记录(1.x)
16.2016.20.1
1.10.316.20.2
1.10.216.20.3
1.10.116.20.4
1.10.016.20.5
1.9.2316.20.6
1.9.2216.20.7
1.9.1916.20.8
1.9.1816.20.9
1.9.1716.20.10
1.9.1616.20.11
1.9.1516.20.12
1.9.1416.20.13
1.9.1216.20.14
1.9.1116.20.15
1.9.916.20.16
1.9.716.20.17
1.9.616.20.18
1.9.516.20.19
1.9.416.20.20
1.9.316.20.21
1.9.216.20.22
1.9.116.20.23
1.9.016.20.24
1.8.1316.20.25
1.8.1216.20.26
1.8.1116.20.27
1.8.1016.20.28
1.8.916.20.29
1.8.816.20.30
1.8.716.20.31
1.8.616.20.32
1.8.516.20.33
1.8.416.20.34
1.8.316.20.35
1.8.216.20.36
1.8.116.20.37
1.8.016.20.38
1.7.2216.20.39
1.7.2116.20.40
1.7.2016.20.41
1.7.1916.20.42
1.7.1816.20.43
1.7.1716.20.44
1.7.1616.20.45
1.7.1516.20.46
1.7.1416.20.47
1.7.1316.20.48
1.7.1216.20.49
1.7.1116.20.50
1.7.1016.20.51
1.7.916.20.52
1.7.816.20.53
1.7.716.20.54
1.7.616.20.55
1.7.516.20.56
v1.516.20.57
v1.616.20.58
v1.7
-
历史:版本更新记录(2.x)
16.21 -
历史:版本更新记录(4.x)
16.22
-