PHP – Swoole – swoole_table 資料存取的用法

swoole_table() 可以在 Swoole 中的任何地方共享資料,使用方法很簡單,以下介紹在 WebSocket 中存取,當然也可以將資料共享在 swoole_http_server()。

建立 Swoole.php

 

先定義表格

接著寫入

 

放入資料

務必在 $table->create(); 之後,自訂一個測試資料的鍵叫做 first,依欄位名稱、型態餵入

  • 因為 data 欄位型態是 swoole_table::TYPE_STRING ,所以數據如果是陣列的話,務必用 json 格式存放

 

取得資料

  • 因為是回呼函式,閉包的情況下,在內部必須呼叫 $GLOBALS[‘table’] 而不是 $table

 

邏輯寫好後啟用服務

在 Command-Line 執行

瀏覽器連接上 WebSocket 以後,就會看到

這個應用,當然就可以用在區分不同群組內的訊息廣播,A群組只有裡面的人才看的到訊息,B群組看不到。

php – swoole – 架設 websocket 進階範例

看過 上一篇(swoole 架設 websocket 範例) 後,應該都有概念了,這次用非常簡單的程式碼建立一個範例,會讓你更有感覺資料的傳送/接收。

影片範例

Composer

使用 jsnlib/swoole 輔助工具來簡化 onMessage 事件。

 

Swoole.php

 

client.html

 

Linux – Ubuntu – 8080 被佔用的解決方法

使用 netstat 查找哪個程序佔用

看到了如

tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 31814/php,編號是 31814,我們將他殺掉並重新啟動伺服器

參考網友

 

php – swoole – 架設 websocket 簡單範例

安裝 swoole 擴展 以後,接著我們要示範是否能建立 websocket 給 Client 端。

 

swoole.php

  • $ws->push() 推送給 Client 端數據。參考
  • 在 callback 中的 echo, print_r, var_dump … 的輸出,都會顯示在 Command-Lind 而不是給 Client 端。

 

Client 的 JS 程式碼 index.html

 

使用 command line 觸發 Swoole

 

瀏覽器運行

上方 onMessage 目前會將接收到的訊息,發送給所有人。也就是說,如果是A發送到 websocket,那麼 websocket 也會把訊息發送給 A,B,C,D…… 如果自己發送的訊息不想接收到,可以參考進階範例

php – swoole 安裝

Swoole

PHP的異步、並行、高性能網絡通信引擎,使用純C語言編寫,提供了PHP語言的異步多線程服務器,異步TCP/UDP網絡客戶端,異步MySQL,異步Redis,數據庫連接池,AsyncTask,消息隊列,毫秒定時器,異步文件讀寫,異步DNS查詢。 Swoole內置了Http/WebSocket服務器端/客戶端、Http2.0服務器端。

我在 Ubuntu 16 Command-Line 直接鍵入 phpize 出現

那就代表沒有安裝,我們先安裝它。用 aptitude 搜尋

  • 其中 php7.1-dev 可以更換成你的任何 7.x 版本,例如 php7.0-dev

查看安裝好的 phpize 位置

 

安裝 swoole

可用 aptitude 安裝/確定以下工具,參考參考

  • cmake
  • gcc
  • autoconf
  • pcre
  • make

使用 wget 下載封包,我找到下載 tar.gz 的網址

解壓我下載的位置,並依序安裝指令

安裝好後,修改 php.ini 。注意 php.ini 有兩個

  • /etc/php/7.1/cli/php.ini <—- 務必修改它,因為 swoole 要從 command line 呼叫
  • /etc/php/7.1/apache2/php.ini <—- 也可修改它,但是用瀏覽器執行 swoole 會出現警告,所以這裡啟用沒有多大用處

參考官方說明

** 如果你運行出現 PHP Fatal error: Class ‘swoole_http_server’ not found 那就是改錯 php.ini 了。

接著在 extension 的部分新加入 swoole.so

存檔後重啟 apache

檢查 swoole 是否出現在模組列表

並使用 phpinfo() 可以查看到 swoole 。

架設完畢後,我們可以寫簡單測試來看看是否正常運作

  1. php – swoole – 架設 websocket 簡單範例
  2. php – swoole – 架設 websocket 進階範例