swoole 使用者下單及時通知

Krisji發表於2019-05-06

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 協議》,轉載必須註明作者和本文連結

相關文章