Try   HackMD

Swoole 工作坊事前注意事項

為了確保學員在工作坊上課期間可以有充足的時間來進行相關的實作,在課程開始前請學員在當日上課前先在自己的電腦環境中先安裝好 Swoole 相關環境。

Swoole 安裝方式有以下幾種:

  • 自行編譯
  • Pecl
  • Homebrew (MacOS)
  • Docker
  • Swoole-Cli(推薦)

MacOS M1 晶片在透過編譯、Pecl 安裝過程中可能會遇到一些問題,優先推薦大家使用 Swoole-Cli 方式進行安裝,此種方式不需要手動安裝 extension 以及不會影響自己機器上的 PHP 環境。

環境要求

支援 Linux(2.3.32 以上)、FreeBSD、MacOS 三種作業系統,若為 Windows 作業系統請搭配 WSL 環境或是 Cygwin 使用。

注意:若非使用 Swoole-Cli 要特別注意 PHP 版本需要在 8.0 以上。

Laravel Octane requires PHP 8.0+

Swoole-Cli(推薦)

Swoole-Cli 為官方最新釋出的二進位執行環境,一個 Binary 檔案即包含了 PHP 與 Swoole 環境,不需依賴機器環境上的 PHP 即可使用,為目前最簡單的安裝方式。

tar zxvf swoole-cli-v5.0.1-macos-x64.tar.xz

mv swoole-cli /usr/local/bin/swoole-cli
  • 將 Swoole-Cli 加上可執行權限
chmod +x /usr/local/bin/swoole-cli

Windows 用戶下載下來後執行 swoole-cli 執行檔即可運行

自行編譯

  • 編譯相關需求

    • 4.8 版本需要 php-7.2 或更高版本
    • 5.0 版本需要 php-8.0 或更高版本
    • gcc-4.8 或更高版本
    • make
    • autoconf
    • phpize
  • 先將 Swoole 從 GitHub 上將最新版本的原始碼下載下來 https://github.com/swoole/swoole-src/releases

  • 切換至 Swoole 原始碼的目錄後進行編譯

cd swoole-src

phpize
./configure
make
sudo make install
  • 在 php.ini 中加入 swoole extension 設定
extension=swoole.so

若不知道自己機器上的 php.ini 檔案位置,可以透過 php --ini 來取得相關資訊。

Pecl

  • 透過 pecl 直接安裝
pecl install swoole

Homebrew (MacOS)

  • 透過 Homebrew 進行安裝
brew tap shivammathur/extensions
brew install shivammathur/extensions/swoole@8.1

若為 M1 晶片的 Mac 機型在編譯 Swoole 時會遇到錯誤,使用 shivammathur/extensions 的 formula 即可正常安裝。

Docker

  • 透過 Docker 使用 phpswoole/swoole image 使用
docker run --rm phpswoole/swoole "php --ri swoole"

不熟悉 Docker 相關操作的人建議在本機上安裝環境,以利課程順利進行。

檢查 Swoole 安裝結果

php --ri swoole

若是使用 Swoole-Cli 則使用:

swoole-cli --ri swoole

若有正確安裝 Swoole,畫面上會出現:

Swoole => enabled
Author => Swoole Team <team@swoole.com>
Version => 5.0.1
Built => Nov  9 2022 17:27:42
coroutine => enabled with boost asm context
kqueue => enabled
rwlock => enabled
sockets => enabled
openssl => OpenSSL 1.1.1p  21 Jun 2022
dtls => enabled
http2 => enabled
json => enabled
curl-native => enabled
pcre => enabled
c-ares => 1.18.1
zlib => 1.2.11
mysqlnd => enabled
async_redis => enabled

Directive => Local Value => Master Value
swoole.enable_coroutine => On => On
swoole.enable_library => On => On
swoole.enable_preemptive_scheduler => Off => Off
swoole.display_errors => On => On
swoole.use_shortname => On => On
swoole.unixsock_buffer_size => 262144 => 262144