thinkphp6 websocket-room的加入房间+离开房间+房间消息发送

先命令行建立WsJoin(加入房间) WsLeave(离开房间) RoomTest(房间发送文件)
在这里插入图片描述

客户端代码

<html>
    <head></head>
    <body>
    <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>
    <!-- 接收者<input type="text" id="fid"> -->
    <!-- 接收者<input type="text" id="fid"> -->
    <button onclick="jaru()">加入房间</button>
    <button onclick="likai()">离开房间</button>
    发送内容<input type="text" id="content">
    <button onclick="roomcall()">发送</button>
    <script>ip
        var ws = new WebSocket("ws://ip:端口/");
        ws.onopen = function () {
                console.log('lianjiezhong')
        };
        ws.onclose = function () {
                console.log("lianjieguanbi")
        };


        ws.onmessage = function (evt) {
            // console.log(evt.data)
            call_message(evt.data)
        };
        //处理回调参数
        function call_message(data){
            //处理回调数据
            console.log(data);
            var start;
            var start_arr = data.indexOf('[');
            var start_json = data.indexOf('{');
            if(start_arr < 0){
                start = start_json;
            }
            if(start_arr >= 0 && start_json >= 0){
                start = Math.min(start_arr,start_json);
            }
            if(start){
               var json =  JSON.parse(data.substr(start));
               if (json instanceof Array){
                    window[json[0]](json[1])
               }
            }
        }
//加入房间
    function jaru(){
        var room = prompt("输入加入房间号");
        ws.send(JSON.stringify(['join',{
            room:room
        }]));
    }
//加入房间回调
    function joincall(){
        console.log(message);
    }
//离开房间事件
    function likai(){
        var room = prompt("请输入离开房间号");
        ws.send(JSON.stringify(['leave',{
            room:room
        }]))
    }
    //离开房间回调
    function leavecall(){
        console.log(message);
    }
    //房间消息发送
    function roomcall(){
        var room = prompt("请输入发送房间号");
        var msg = $("#content").val();
        ws.send(JSON.stringify(['RoomTest',{
            room:room,
            msg:msg
        }]));
    }


    </script>
    </body>
</html>

配置文件中增加

在这里插入图片描述

加入房间代码

<?php
declare (strict_types = 1);

namespace app\listener;

class WsJoin
{
    /**
     * 事件监听处理
     *
     * @return mixed
     */
    public function handle($event)
    {

        $ws = app('think\swoole\Websocket');
        // 这块要注意是
        //$ws 引入的是 \vendor\topthink\think-swoole\src\Websocket.php
        //$room  引入的是 \vendor\topthink\think-swoole\src\websocket\Room.php
        //这两块的命名空间不一样 Websocket  websocket
        //一个是大写 一个是小写  room并不是在大写的Websocket下面
        $room  =  app('think\swoole\websocket\Room');
        var_dump($room->getClients($event['room']));
        //加入房间
        $ws -> join($event['room']);
          // 指定客户端加入指定Room、
             //$ws->setSender(2)->join($event['room']);
        var_dump($room -> getClients($event['room']));
        $ws->emit('joincall','加入成功');
    }

}

离开房间代码

<?php
declare (strict_types = 1);

namespace app\listener;

class WsLeave
{
    /**
     * 事件监听处理
     *
     * @return mixed
     */
    public function handle($event)
    {
        $ws = app('think\swoole\Websocket');
        $roomobj = app('think\swoole\websocket\Room');
        var_dump($roomobj->getClients($event['room']));
        //离开房间
        $ws->leave($event['room']);
        var_dump($roomobj->getClients($event['room']));
        $ws -> emit('leavecall', '离开了房间');
    }    
}

房间消息发送代码

<?php
declare (strict_types = 1);

namespace app\listener;

class RoomTest
{
    /**
     * 事件监听处理
     *
     * @return mixed
     */
    public function handle($event)
    {
        $ws   = app('think\swoole\Websocket');
        //to 也可以是房间名  现在用的就是房间名  
        $ws -> to($event['room']) -> emit('roomcall', $event['msg']);
    }    
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值