PHP 8.1
版本已經在 2021年 11 月 25 日釋出了,Swoole 也在第一時間進行了相容處理,但由於強型別的一些限制,都會導致一些BC的情況發生。
於是目前將master
分支不再作為 4.9
版本釋出,而調整為 5.0
版本釋出,預計釋出時間為農曆新年後。
新的執行模式
作為PHP開發者都應該知道PHP有兩種執行模式:php-fpm
和php-cli
,那麼在 Swoole 5.0
中將迎來一種新的執行模式:swoole-cli
。
Swoole 將像node.js
這樣作為獨立程式提供給使用者,而不是作為PHP
的一個擴充套件。
除此之外swoole-cli
會盡可能地對php-src
進行裁剪,移除一些不用的機制、模組、擴充套件、函式、型別、常量、程式碼,使得整個程式可以在幾分鐘之內編譯完成。
在 GitHub release時,將隨著原始碼包進行釋出,例如在v4.8.6中,就提供了swoole-cli-v4.8.6-linux-x64.tar.xz,可以先進行嚐鮮體驗。
下載解壓後就可以看到如下結構:
.
├── LICENSE
└── swoole-cli
後期也會開源構建工具,可以自行構建。
使用方法和 PHP 在 cli 模式下執行相同:
[root@lufei ~]# ./swoole-cli -v
Swoole 4.8.6 (cli) (built: Jan 11 2022 10:19:44) (NTS)
[root@lufei ~]# ./swoole-cli -m
[PHP Modules]
bcmath
bz2
Core
ctype
curl
date
dom
exif
fileinfo
filter
gd
gmp
hash
iconv
imagick
intl
json
libxml
mbstring
mysqli
mysqlnd
openssl
pcntl
pcre
PDO
pdo_mysql
pdo_sqlite
Phar
posix
redis
Reflection
session
SimpleXML
soap
sockets
SPL
sqlite3
standard
swoole
tokenizer
xml
xmlreader
xmlwriter
xsl
zip
zlib
[Zend Modules]
- 執行框架
Hyperf:./swoole-cli bin/hyperf.php start
imi:./swoole-cli vendor/bin/imi-swoole swoole/start
easyswoole:./swoole-cli easyswoole server start
靜態編譯無依賴
swoole-cli
會全部使用靜態編譯連線方式,libc
和libstdc++
使用musl
,並會包含openssl
和curl
庫和擴充套件。
使用者可修改構建指令碼新增其他更多三方擴充套件。
使得Swoole程式不再依賴任何系統的so
,可在任意Linux
系統之間複製分發執行。
htf@htf-ThinkPad-T470p:~/workspace/php/awsl-psl$ ldd swoole-cli
不是動態可執行檔案
移除動態擴充套件載入機制
移除 dl()
函式和php.ini
配置extension={name}.so
的動態擴充套件載入機制,所有擴充套件必須為靜態編譯。
swoole-cli
允許自定義構建系統,將擴充套件新增到模組列表中。
移除 php -S
內建伺服器
在Swoole環境下沒有意義。
移除內建擴充套件
移除使用率低、歷史遺留、不支援協程的內建擴充套件,包括但不限於:
com_dotnet
dba
ftp
ffi
imap
ldap
oci8
odbc
pdo_dblib
pdo_firebird
pdo_oci
pdo_odbc
pdo_pgsql
pgsql
pspell
shmop
snmp
sysvmsg
sysvsem
tidy
swoole-cli
具體安裝的擴充套件以釋出後為準。
移除函式
移除非 cli
模式、使用率低、歷史遺留、不支援協程的內建函式,包括但不限於:
checkdnsrr
dns_check_record
dns_get_mx
header
header_register_callback
header_remove
session_start
mail
移除 ZTS
移除ZTS
模式,在cli
模式下ZTS
是沒有任何意義的。