PHP – Swoole – swoole_table 資料存取的用法
swoole_table() 可以在 Swoole 中的任何地方共享資料,使用方法很簡單,以下介紹在 WebSocket 中存取,當然也可以將資料共享在 swoole_http_server()。
建立 Swoole.php
<?php // 建立 websocket 物件,監聽 0.0.0.0:8080 連接埠 $ws = new swoole_websocket_server("0.0.0.0", 8080); // 0.0.0.0 等於 localhost
先定義表格
接著寫入
// 建立表格的大小,需要是 2 的次方 $GLOBALS['table'] = $table = new swoole_table(1024); // 建立 3 個欄位 room_id, user_id, data,並定義欄位型態 $table->column('room_id', swoole_table::TYPE_INT); $table->column('user_id', swoole_table::TYPE_INT); $table->column('data', swoole_table::TYPE_STRING, 64); $table->create();
- swoole_table->column(strin 欄位名稱, int 型態, int 大小)
- 型態只有三種
- swoole_table::TYPE_INT
- swoole_table::TYPE_FLOAT
- swoole_table::TYPE_STRING
- 當型態是字串 swoole_table::TYPE_STRING 的時候,務必要指定大小
- 型態只有三種
放入資料
務必在 $table->create(); 之後,自訂一個測試資料的鍵叫做 first,依欄位名稱、型態餵入
$table->set('first', [ 'room_id' => 1, 'user_id' => 777, 'data' => json_encode([ 'message' => 'Hello World', 'datetime' => date("Y-m-d H:i:s") ]) ]);
- 因為 data 欄位型態是 swoole_table::TYPE_STRING ,所以數據如果是陣列的話,務必用 json 格式存放
取得資料
// 監聽 WebSocket 連接打開事件 $ws->on('open', function ($ws, $request) { print_r( $GLOBALS['table']->get('first') ); });
- 因為是回呼函式,閉包的情況下,在內部必須呼叫 $GLOBALS[‘table’] 而不是 $table
邏輯寫好後啟用服務
在 Command-Line 執行
php swoole.php
瀏覽器連接上 WebSocket 以後,就會看到
Array ( [room_id] => 1 [user_id] => 777 [data] => {"message":"Hello World","datetime":"2017-10-12 11:26:52"} )
這個應用,當然就可以用在區分不同群組內的訊息廣播,A群組只有裡面的人才看的到訊息,B群組看不到。