<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 例子-分組發送 **`(要求Workerman版本>=3.3.0)`** 基于Worker的多進程(分布式集群)分組推送系統 ```php require_once __DIR__ . '/../Workerman/Autoloader.php'; require_once __DIR__ . '/Channel/src/Server.php'; require_once __DIR__ . '/Channel/src/Client.php'; use Workerman\Worker; $channel_server = new Channel\Server('0.0.0.0', 2206); $worker = new Worker('websocket://0.0.0.0:1234'); $worker->count = 8; // 全局群組到鏈接的映射數組 $group_con_map = array(); $worker->onWorkerStart = function(){ // Channel客戶端連接到Channel服務端 Channel\Client::connect('127.0.0.1', 2206); // 監聽全局分組發送消息事件 Channel\Client::on('send_to_group', function($event_data){ $group_id = $event_data['group_id']; $message = $event_data['message']; global $group_con_map; var_dump(array_keys($group_con_map)); if (isset($group_con_map[$group_id])) { foreach ($group_con_map[$group_id] as $con) { $con->send($message); } } }); }; $worker->onMessage = function($con, $data){ // 加入群組消息{"cmd":"add_group", "group_id":"123"} // 或者 群發消息{"cmd":"send_to_group", "group_id":"123", "message":"這個是消息"} $data = json_decode($data, true); var_dump($data); $cmd = $data['cmd']; $group_id = $data['group_id']; switch($cmd) { // 鏈接加入群組 case "add_group": global $group_con_map; // 將鏈接加入到對應的群組數組里 $group_con_map[$group_id][$con->id] = $con; // 記錄這個鏈接加入了哪些群組,方便在onclose的時候清理group_con_map對應群組的數據 $con->group_id = isset($con->group_id) ? $con->group_id : array(); $con->group_id[$group_id] = $group_id; break; // 群發消息給群組 case "send_to_group": // Channel\Client給所有服務器的所有進程廣播分組發送消息事件 Channel\Client::publish('send_to_group', array( 'group_id'=>$group_id, 'message'=>$data['message'] )); break; } }; // 這里很重要,鏈接關閉時把鏈接從全局群組數據中刪除,避免內存泄漏 $worker->onClose = function($con){ global $group_con_map; // 遍歷鏈接加入的所有群組,從group_con_map刪除對應的數據 if (isset($con->group_id)) { foreach ($con->group_id as $group_id) { unset($group_con_map[$group_id][$con->id]); } if (empty($group_con_map[$group_id])) { unset($group_con_map[$group_id]); } } }; Worker::runAll(); ``` ## 測試 (假設都是本機127.0.0.1運行) 1、運行服務端 ```php php start.php start Workerman[del.php] start in DEBUG mode ----------------------- WORKERMAN ----------------------------- Workerman version:3.4.2 PHP version:7.1.3 ------------------------ WORKERS ------------------------------- user worker listen processes status liliang ChannelServer frame://0.0.0.0:2206 1 [OK] liliang none websocket://0.0.0.0:1234 12 [OK] ---------------------------------------------------------------- Press Ctrl-C to quit. Start success. ``` 2、客戶端連接服務端 打開chrome瀏覽器,按F12打開調試控制臺,在Console一欄輸入(或者把下面代碼放入到html頁面用js運行) ```php // 假設服務端ip為127.0.0.1,測試時請改成實際服務端ip ws = new WebSocket('ws://127.0.0.1:1234'); ws.onmessage = function(data){console.log(data.data)}; ws.onopen = function() { ws.send('{"cmd":"add_group", "group_id":"123"}'); ws.send('{"cmd":"send_to_group", "group_id":"123", "message":"這個是消息"}'); }; ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看