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();

 

放入資料

務必在 $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群組看不到。

發表迴響