swoole 點對點通信,點對多通信 uid綁定fd 含客戶端

<?php
$server = new swoole_websocket_server("localhost", 9503);   //自己在阿里雲後臺開放2345端口
$server->set(array(
    'heartbeat_check_interval' =>600,   
    'heartbeat_idle_time' =>600,
));


global $redis;

$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->select(11);



$server->on('open', function ($server, $request) {

    //綁定uid和fd
    $data=$request->get;
  $server->push($request->fd,'歡迎你登錄,你的fd是'.$request->fd.'uid='.$data['uid']);
  
  $GLOBALS['redis']->set($data['uid'],$request->fd);
 
});
$server->on('message', function ($server, $request) {
    $resut = json_decode($request->data);
    $self_fid= $GLOBALS['redis']->get($resut[0]);//自己
    $uidArr= $resut[1];
    $t_id_arr=[];
    if(strpos($uidArr,",")){
        
        $uidArr=explode(",",$uidArr);
        foreach($uidArr as $v){
            $t_id_arr[]=$GLOBALS['redis']->get($v);
        }
        
    }else{
     $t_id_arr[]=$GLOBALS['redis']->get($uidArr);   
    }
   array_push($t_id_arr,$self_fid);
    $msg = $resut[0].":".$resut[2];
    //發送
      
        foreach ($server->connections as $conn){
            if(in_array($conn,$t_id_arr)){
            $server->push($conn,$msg);
            }
        }
    
});
$server->on('close', function ($server, $fd) {   //離開
    echo "{$fd} 下線了\n";
    unset($GLOBALS['fd'][$fd]);
});
$server->start();



客戶端

<html>
<head>
    <meta charset="UTF-8">
    <title>chat2</title>
    <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
    <script type="text/javascript">
        var wsServer = 'ws://43.142.145.59:9503'; //服務器地址
        var websocket; //創建WebSocket對象


       function connect(){
         var uid=$("#myuid").val();
          wsServer = wsServer+'?uid='+uid; //服務器地址
         websocket = new WebSocket(wsServer); //創建WebSocket對象
         initSocket();
       }


     function initSocket(){
         websocket.onopen = function (evt) {
//已經建立連接

            $('#send').on('click',function(){
                var msg = $('#msg').val();
                if(msg == '')
                {
                    alert('不能發送空消息');
                    return ;
                }
                var arr =Array();
                arr[0]=$("#myuid").val();   //自己
                 arr[1]=$("#uid").val(); //發給誰
                arr[2]=msg;  //內容
                var str = JSON.stringify(arr);
                websocket.send(str);
            });
        };

        websocket.onclose = function (evt) {
//已經關閉連接
        };
        websocket.onmessage = function (evt) {
//收到服務器消息,使用evt.data提取\
            console.log(evt.data)
            $("#content").append(evt.data+"<br>");
        };
        websocket.onerror = function (evt) {
//產生異常
        };
     }
       

        function send(){
            $msg = $('#msg').val();
            websocket.send($msg);
        }

    </script>
</head>
<body>
<div id="content" style="border:1px #ccc solid;width:300rpx;height:500px;">
聊天框

</div>    

設置自己的UID<input id="myuid" type="text" name="uid">
<input id="send2" type="button" name="" onClick="connect()" value="鏈接">

<div>
    發給UID:<input id="uid" type="text" name="uid">
發送內容:
<input id="msg" type="text" name="msg">
<input id="send" type="button" name="" value="單發">

</div>
</body>
</html>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章