Laravel 使用 Swoole 打造 WebSocket 服務

更新於 發佈於 閱讀時間約 6 分鐘

Swoole是一個使用C語言寫出來的PHP extension,本篇筆記了如何使用Laravel+Swoole來打造websocket應用,包含從伺服器安裝到基本範例程式,有websocket基本觀念後,再花點時間,就能把程式改成多人聊天室或私頻聊天等應用了。

  • 由於Swoole不支援Windows,以下操作皆是在linux(Ubuntu 22.04)系統環境下運作的。

Requirement

需先確認系統有安裝PHP與Nginx,本文是在此基礎環境下運作的。

$ sudo apt update
$ sudo apt upgrade
  • 安裝Nginx:
$ sudo apt install nginx
  • 安裝PHP:
$ sudo apt install php8.1-fpm php8.1 php-dev -y
$ php -v
raw-image

安裝PHP swoole擴展

$ sudo pecl install swoole
  • 若找不到pecl指令,需先安裝:
$ sudo apt install php-pear

enable swoole:

  1. 打開php.ini:
$ sudo nano /etc/php/8.1/cli/php.ini
  • 可使用這個指令查看php.ini在哪:
$ php --ini
raw-image

2. 在php.ini 檔案最後面加上:

extension=swoole.so

3. Restart php-fpm生效:

$ sudo service php8.1-fpm restart

查看swoole是否安裝成功:

$ php -m
raw-image

安裝composer

  • 若無composer,需先安裝:
$ sudo apt install curl unzip
$ sudo apt install php-curl
$ curl -sS https://getcomposer.org/installer -o composer-setup.php
$ sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer
$ composer -V

安裝Laravel Installer

  • 使用Composer安裝Laravel Installer:
$ composer global require "laravel/installer"
  • 將 composer bin folder 加入環境變數,這樣才能用laravel指令來建立專案:
$ nano $HOME/.bashrc
  • 在最下面加入:
$ export PATH="$PATH:$HOME/.config/composer/vendor/bin"
  • Reload .bashrc file:
$ source $HOME/.bashrc
raw-image

建立Laravel新專案

  • 接著就能用laravel installer來建立Laravel新專案:
$ laravel new swoole_test

安裝laravel-swoole

  • 接著在swoole_test專案目錄下,安裝laraveltw/laravel-swoole:
$ composer require swooletw/laravel-swoole

撰寫Swoole websocket後端程式

  • 建立swoole命令:
$ php artisan make:command Swoole

會在app\Console\Command路徑下建立Swoole.php:

raw-image

將code改成這樣:

raw-image
raw-image

https://gist.github.com/snailsmall612/15534af7cba04d19e06d0e78f67558bf


撰寫Swoole websocket前端程式

raw-image

https://gist.github.com/snailsmall612/8b1997c3a9b3458e79511385c6aafcd2


啟動websocket server

$ php artisan swoole start

接著當client連線時,瀏覽器與server訊息如下圖:

raw-image
raw-image
  • fd: client的唯一識別ID




本筆記參考:

  1. https://www.jianshu.com/p/b5ee9f72fcd1
  2. https://learnku.com/articles/4633/with-supervisor-use-swoole-to-create-a-websocket-server-in-laravel
  3. https://learnku.com/articles/47250
  4. https://iter01.com/520130.html
  5. https://www.swoole.com/
  6. https://blog.albert-chen.com/php-with-swoole/
  7. https://www.cloudbooklet.com/how-to-install-lemp-stack-nginx-mysql-php-on-ubuntu-22-04/
  8. https://www.how2shout.com/linux/how-to-install-composer-on-ubuntu-22-04-20-04-lts/
  9. https://stackoverflow.com/questions/61395786/i-get-laravel-command-not-found-on-ubuntu-20-04
  10. https://wiki.swoole.com/#/environment



留言
avatar-img
留言分享你的想法!
avatar-img
Vic Lin的沙龍
20會員
161內容數
Vic Lin的沙龍的其他內容
2023/08/13
父元件 傳遞方法使用@ <template>    ...    <Login @modalClose="modalClose"/> ... </template> <script setup>     const _modal = ref();     function m
2023/08/13
父元件 傳遞方法使用@ <template>    ...    <Login @modalClose="modalClose"/> ... </template> <script setup>     const _modal = ref();     function m
2023/03/25
前情提要 由於我的筆電已經用了10年,無法再戰下去了,且有預算考量,加上使用電腦幾乎都是定點,只有偶爾回家的時候會需要攜帶,因此最終選擇了迷你電腦,體積小不占空間,又方便攜帶,剛好符合我的需求。 菜單 由於這台無法裝獨顯,所以CPU的部分選擇 AMD R5 3400G(含Vega 11內
Thumbnail
2023/03/25
前情提要 由於我的筆電已經用了10年,無法再戰下去了,且有預算考量,加上使用電腦幾乎都是定點,只有偶爾回家的時候會需要攜帶,因此最終選擇了迷你電腦,體積小不占空間,又方便攜帶,剛好符合我的需求。 菜單 由於這台無法裝獨顯,所以CPU的部分選擇 AMD R5 3400G(含Vega 11內
Thumbnail
2023/03/10
Nuxt3中可使用useFetch來獲取數據,不須再引用axios,相當方便: 本筆記參考: https://juejin.cn/post/7104071421160063012 https://juejin.cn/post/7086472647575339045
2023/03/10
Nuxt3中可使用useFetch來獲取數據,不須再引用axios,相當方便: 本筆記參考: https://juejin.cn/post/7104071421160063012 https://juejin.cn/post/7086472647575339045
看更多
你可能也想看
Thumbnail
介紹朋友新開的蝦皮選物店『10樓2選物店』,並分享方格子與蝦皮合作的分潤計畫,註冊流程簡單,0成本、無綁約,推薦給想增加收入的讀者。
Thumbnail
介紹朋友新開的蝦皮選物店『10樓2選物店』,並分享方格子與蝦皮合作的分潤計畫,註冊流程簡單,0成本、無綁約,推薦給想增加收入的讀者。
Thumbnail
當你邊吃粽子邊看龍舟競賽直播的時候,可能會順道悼念一下2300多年前投江的屈原。但你知道端午節及其活動原先都與屈原毫無關係嗎?這是怎麼回事呢? 本文深入探討端午節設立初衷、粽子、龍舟競渡與屈原自沉四者。看完這篇文章,你就會對端午、粽子、龍舟和屈原的四角關係有新的認識喔。那就讓我們一起解開謎團吧!
Thumbnail
當你邊吃粽子邊看龍舟競賽直播的時候,可能會順道悼念一下2300多年前投江的屈原。但你知道端午節及其活動原先都與屈原毫無關係嗎?這是怎麼回事呢? 本文深入探討端午節設立初衷、粽子、龍舟競渡與屈原自沉四者。看完這篇文章,你就會對端午、粽子、龍舟和屈原的四角關係有新的認識喔。那就讓我們一起解開謎團吧!
Thumbnail
Composer是PHP的軟體套件管理系統,它提供用於管理PHP軟體和依賴庫關係的標準格式。通常以專案為單位進行管理,會在專案根目錄底下(預設是vendor)安裝套件,除此外可以安裝全局套件。
Thumbnail
Composer是PHP的軟體套件管理系統,它提供用於管理PHP軟體和依賴庫關係的標準格式。通常以專案為單位進行管理,會在專案根目錄底下(預設是vendor)安裝套件,除此外可以安裝全局套件。
Thumbnail
Laravel是一個以MVC(參考:[設計模式]MVC)為架構的PHP Web框架。Laravel支援使用者身份驗證和授權,提供模組化套件系統。Laravel使用Blade模板系統將PHP程式碼與HTML網頁分離。 安裝環境 下載安裝composer https://getcomposer.o
Thumbnail
Laravel是一個以MVC(參考:[設計模式]MVC)為架構的PHP Web框架。Laravel支援使用者身份驗證和授權,提供模組化套件系統。Laravel使用Blade模板系統將PHP程式碼與HTML網頁分離。 安裝環境 下載安裝composer https://getcomposer.o
Thumbnail
使用 Vscode 連線至 WSL 的詳細教學
Thumbnail
使用 Vscode 連線至 WSL 的詳細教學
Thumbnail
本篇純粹紀錄實作流程,以方便未來可以照此版繼續優化改進作法,這篇會使用Laravel 9版本並搭配Boostrap 5來做開發。 發現將每一次的實作作筆記,回頭再看的時候,就可以發現實作差異並進行改正,沒搞懂的底層操作也能在覆盤的時候理解,建議大家都要筆記自己的實作流程。
Thumbnail
本篇純粹紀錄實作流程,以方便未來可以照此版繼續優化改進作法,這篇會使用Laravel 9版本並搭配Boostrap 5來做開發。 發現將每一次的實作作筆記,回頭再看的時候,就可以發現實作差異並進行改正,沒搞懂的底層操作也能在覆盤的時候理解,建議大家都要筆記自己的實作流程。
Thumbnail
承上篇,繼續往下走吧! 來說明一下 PHP 兩個會用到的套件安裝,一個是 ionCube,另一個為 memcached ●PHP 套件 ionCube 安裝 先以下列指令,在帳戶內建立一個 tmp 資料夾備用,執行時留意是在帳號剛登入主機的位置喔!
Thumbnail
承上篇,繼續往下走吧! 來說明一下 PHP 兩個會用到的套件安裝,一個是 ionCube,另一個為 memcached ●PHP 套件 ionCube 安裝 先以下列指令,在帳戶內建立一個 tmp 資料夾備用,執行時留意是在帳號剛登入主機的位置喔!
Thumbnail
欲在Laravel中使用MongoDB,首先要確認有安裝MongoDB PHP driver,接著再安裝Laravel MongoDB套件,才能開始使用CRUD。 1. 安裝MongoDB PHP driver (1) 到這邊下載MongoDB PHP driver (3) 檢查是否正常 後記:
Thumbnail
欲在Laravel中使用MongoDB,首先要確認有安裝MongoDB PHP driver,接著再安裝Laravel MongoDB套件,才能開始使用CRUD。 1. 安裝MongoDB PHP driver (1) 到這邊下載MongoDB PHP driver (3) 檢查是否正常 後記:
Thumbnail
Swoole是一個使用C語言寫出來的PHP extension,本篇筆記了如何使用Laravel+Swoole來打造websocket應用,包含從伺服器安裝到基本範例程式,有websocket基本觀念後,再花點時間,就能把程式改成多人聊天室或私頻聊天等應用了。 Requirement 安裝PHP:
Thumbnail
Swoole是一個使用C語言寫出來的PHP extension,本篇筆記了如何使用Laravel+Swoole來打造websocket應用,包含從伺服器安裝到基本範例程式,有websocket基本觀念後,再花點時間,就能把程式改成多人聊天室或私頻聊天等應用了。 Requirement 安裝PHP:
Thumbnail
本文使用網站的 FB 登入做示範 採用 Laravel 8 + Socialite 5 使用 Session 記錄狀態 不同版本可能會有些許語法及方法上的差異,請自行調整 前言 最近因為碰到需要實作 OAuth 第三方登入的需求,只好把之前隨便看看的東西撿回來研究並實作。不過我找到多數現存的中文文章
Thumbnail
本文使用網站的 FB 登入做示範 採用 Laravel 8 + Socialite 5 使用 Session 記錄狀態 不同版本可能會有些許語法及方法上的差異,請自行調整 前言 最近因為碰到需要實作 OAuth 第三方登入的需求,只好把之前隨便看看的東西撿回來研究並實作。不過我找到多數現存的中文文章
Thumbnail
本筆記紀錄如何在Linux(CentOS 8)安裝Nginx, MySQL, PHP環境。...
Thumbnail
本筆記紀錄如何在Linux(CentOS 8)安裝Nginx, MySQL, PHP環境。...
Thumbnail
Note: 本筆記使用的是Windows 10作業系統 1. 下載並安裝WAMP或XAMPP等等 本文是使用wamp,這邊略過安裝教學。 2. 下載並安裝Composer 至官網下載Composer windows installer,到這一步驟時,選擇PHP版本位置: ...
Thumbnail
Note: 本筆記使用的是Windows 10作業系統 1. 下載並安裝WAMP或XAMPP等等 本文是使用wamp,這邊略過安裝教學。 2. 下載並安裝Composer 至官網下載Composer windows installer,到這一步驟時,選擇PHP版本位置: ...
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News