Swoole v5.0 版本新特性預覽之新的執行模式

沈唁發表於2022-01-21

PHP 8.1 版本已經在 2021年 11 月 25 日釋出了,Swoole 也在第一時間進行了相容處理,但由於強型別的一些限制,都會導致一些BC的情況發生。

於是目前將master分支不再作為 4.9版本釋出,而調整為 5.0版本釋出,預計釋出時間為農曆新年後。

新的執行模式

作為PHP開發者都應該知道PHP有兩種執行模式:php-fpmphp-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會全部使用靜態編譯連線方式,libclibstdc++使用musl,並會包含opensslcurl庫和擴充套件。

使用者可修改構建指令碼新增其他更多三方擴充套件。

使得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是沒有任何意義的。

相關文章