国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

看文檔一知半解?對單人的ID 發(fā)送不出去,無法喚醒前端只能群發(fā)

伊倫哲羅

先上一下全部代碼,嫌太多可以看下面的

public static $online = [];//用來記錄在線用戶
    public function index()
    {
        $context = array(
            'ssl' => array(
                'local_cert'  => $_SERVER['DOCUMENT_ROOT'].'\lx.dg.com.cer',
                'local_pk'    => $_SERVER['DOCUMENT_ROOT'].'\lx.dg.com.key',
                'verify_peer' => false,
            )
        );
      // $io = new SocketIO(8282,$context);//socket的端口
        $io = new SocketIO(8282);//socket的端口
        $io->on('workerStart', function () use ($io) {
            $inner_http_worker = new Worker('http://0.0.0.0:5880');
            $inner_http_worker->onMessage = function ($http_connection, $data) use ($io) {
                // isset(static::$online[$data->post('uid')]);
                $adc["code"]=200;
                $adc["message"]='成功';
                $adc['uid']=$data->post('uid');//要推送的UID 但是不知道怎么送出去
                $adc['data']=json_decode($data->post('msg'),true);
                //$io->to($data->post('uid'))->emit('push', $adc);//這個試了不起效果
                $io->emit('push',$adc);//只能這樣群發(fā)了 前端根據(jù)用戶的ID 從推送的數(shù)據(jù)里撿起屬于自己的
                if(!$data->post('msg')) {
                    $rb=input('param.');
                    $rc=input('');
                    $http_connection->send('fail, $_GET["msg"] not found!!rb:');
                }
                $http_connection->send('ok');
            };
            $inner_http_worker->listen();
        });
        // 當有客戶端連接時
         $io->on('connection', function($socket) {
            // 定義chat message事件回調(diào)函數(shù)
            $socket->on('init', function ($data) use($socket) {
                //這里判斷用戶是否在數(shù)組里結果也沒起效 控制臺里依舊顯示多了一個ID
                //前端頁面刷新就多一個
                $data = json_decode($data, true);
                $socket->uid = $data['uid'];
                static::$online[$data['uid']] =$socket;
                $socket->emit('init', 'login listen success', function ($res){});
            });
            $socket->on('push', function ($data) use($socket) {
                $socket->emit('push', '這是push7788', function ($res){});
                // $io->emit('find message from server',$data);
            });
            $socket->on('disconnect', function($socket){
                static::$online[$socket->uid];
             });
        });
        Worker::runAll();
    }

在拿到要推送的數(shù)據(jù)后,Uid data 測試都不是 空后

    $adc["code"]=200;
    $adc["message"]='成功';
    $adc['uid']=$data->post('uid');//要推送的UID 但是不知道怎么送出去
    $adc['data']=json_decode($data->post('msg'),true);// 要推送的數(shù)據(jù)

使用 //$io->to($data->post('uid'))->emit('push', $adc);//推送給指定的ID 不起作用??

求教應該如何才能正確發(fā)送出去,現(xiàn)在用的群發(fā),
$io->emit('push',$adc);
湊合能解決一下,看了文檔,剛上手真的一點路都找不不到,百度出來的幾乎上沒有多少能用的

2855 1 0
1個回答

q13113671764

我去給你看了一下,socket.io主要是通過事件來進行通訊交互的。所以我覺得可以這樣來處理,在js端定義一個事件
<script>
//這里 uid 實際應該對應每個用戶的唯一uid
let uid = 1;
// 連接服務端
var socket = io('http://127.0.0.1:3120');

// 服務端通過emit('chat message from server', $msg)觸發(fā)客戶端的chat message from server事件
socket.on('chat message ' + uid, function(msg){
console.log('get message:' + msg + ' from server');
});
</script>

在php端獲取到uid以后觸發(fā)uid對應的事件
// 觸發(fā)所有客戶端定義的chat message from server事件
$io->emit("chat message {$uid}", $msg);

你仔細看看他的自定義事件,這個我是根據(jù)他文檔那改的,沒有測試過,但是理論應該是可行的.

  • 伊倫哲羅 2020-08-04

    $io->emit("chat message {$uid}", $msg); 這樣是群發(fā)??! 我現(xiàn)在也是群發(fā)出去帶了UID ,前端判斷是不是當前用戶的,如果有當前用戶一致的ID那就執(zhí)行前端事件,$io->emit("chat message {$uid}", $msg); 第一個參數(shù)是如何溝通,例如我前端寫了一個 login 這個參數(shù)對上之后,就在前端socket.io的login 里出現(xiàn)數(shù)據(jù),第二個事要傳給前端的數(shù)據(jù)……所以還是謝謝您,您的回答對我沒有幫助………

  • q13113671764 2020-08-04

    socket.io主要是通過事件來進行通訊交互,你要理解這句話,基于事件也就是說對它來說是發(fā)送給某個事件的,所以你自己上面那個 $io->emit('push',$adc); 自然就是群發(fā)給所有人,因為你那是所有人都訂閱了這個事件的,我上面發(fā)給你那示例代碼,你自己注意看js 那的
    socket.on('chat message ' + uid, function(msg){
    console.log('get message:' + msg + ' from server');
    });
    這句話,這個就相當于給這個用戶單獨創(chuàng)建一個基于它uid的事件,這個事件是只有他一個人擁有的,所以你在后臺發(fā)送這個,
    $io->emit("chat message {$uid}", $msg);
    是不會推送給別人的,因為uid 對不上的話,它根本沒有這個事件.

  • 伊倫哲羅 2020-08-06

    老哥的意思是在前端的標記里加上UID 就像我是 push1 你是push2?? 但是這樣我真的不會寫了,函數(shù)名是無法加變量的啊

  • 伊倫哲羅 2020-08-06

    我的前端是不是直接的JS 用的VUE 所以這樣的代碼
    sockets:{
    connect(data){
    console.log('鏈接connect',data)
    },
    pusha(msg){// 這里的pusha 沒法加變量的

    }

  • q13113671764 2020-08-07
    let socket = {};
    socket['connect'] = function(data){
    }
    socket['push'+uid] = function(msg){
    
    };
    
    sockets:socket

    我前面那個思路是正確的,我自己已經(jīng)測試過了,至于vue寫法,你試試這樣看看行不行,理論上應該上應該是沒問題的.

  • guofei886 2020-10-02

    你的socket不是已經(jīng)存入$online了嗎?在再調(diào)用出來就可以了呀。
    $online[$data['uid']]->emit('init',$data);
    我是這樣弄的,你可以試試

年代過于久遠,無法發(fā)表回答
??