swoole 及時通知
1 需要的環境
1 首先你必須要裝下php redis swoole 的擴充套件
2 伺服器安裝下redis 伺服器
3 保證伺服器和外網ping通
2 需要在開啟一個swoole服務 下面是程式碼段
1開啟一個服務 很簡單
$this->server = new swoole_websocket_server("0.0.0.0", env('SWOOLE_PORT'));
$this->server->set(array(
'task_worker_num' => 1,//task程式數量
'dispatch_mode' => 2,
'debug_mode' => 1,
'daemonize' => false,//是否守護程式
'log_file' => storage_path('logs/webs_swoole.log'),
));
3 用redis準備好資料集 比方某某在同一個房間 或者同一個組別
1 比方我們在redis建立了2個房間吧:用list資料結構 agent房間和provider房間
2 模擬使用者登入房間的時候 要記錄以下資料
2.1 模擬資料有2個引數 一個cmd 命令(你需要執行的命令) 一個datas 你要傳輸的資料
'{"cmd":"login","datas":{"uid":"' + user_id + '"}}';
3 伺服器接收到訊息後根據業務邏輯判斷
3.1
/**
* 服務端收到訊息
*/
$this->server->on('message', function ($ser, $frame) {
$this->doWork($frame);
});
3.2
$data = json_decode($frame->data, true);
if (empty($data['cmd']) || empty($data['datas'])) {
return;
}
$cmd = $data['cmd'];
$data = $data['datas'];
switch ($cmd) {
case 'login':
$this->redis->set($this->_getSysFdKey($frame->fd), $data['uid']);//這邊記錄登陸的賬號
$this->redis->lPush($this->_getLoginKey($data['uid']), $frame->fd);//這邊記錄所在
$this->redis->lPush($this->_getLoginIdentityKeys($data['uid']), $frame->fd);
break;
case 'case_status':
$this->doCaseStatus($frame, $data);
break;
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結