ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

php直播平台源码如何设置聊天相关功能

2021-06-03 18:53:45  阅读:158  来源: 互联网

标签:socket res usertype 直播 clientRedis msg php roomnum 源码


在php直播平台源码制作时聊天功能是直播软件中的重要功能,在php直播平台源码开发中经常涉及根据用户的不同分类对收发消息进行不同的处理。 处理方式如下:
1.在用户进入房间链接socket时,根据用户的属性进入特定房间

    if(socket.usertype == 60){//新建当前房间的超管频道和场控频道,用于消息发送 
        socket.join(data.roomnum+'_60');
    }else if(socket.usertype == 40){
        socket.join(data.roomnum+'_40');
    }    

2.在用户发消息时,判断发消息用户类型,并根据类型向1个或多个特定分类房间内发消息(切记不要发送重复,尽量不要让每个用户进入多个特定房间)

                clientRedis.hget( "super",socket.uid,function(error,res){
                        if(error) return;
                        if(res != null){
                            var data_str2={
                                            "msg":[
                                                {
 "_method_":"SystemNot",
                                                    "action":"1",
        "ct":''+dataObj['msg'][0]['ct'],
                                     "msgtype":"4"
                                                }
                                            ],
                                            "retcode":"000000",
                                            "retmsg":"OK"
                                        };
process_msg(io,socket.roomnum,JSON.stringify(data_str2));
                            console.log(1);
                        }else{          clientRedis.hget("isspeak",socket.roomnum,function(error,res){
                                if(error) return;
                                if(res == 1 || socket.usertype == 40 || socket.usertype == 50 ){
                                    clientRedis.hget(socket.roomnum + "shutup",socket.uid,function(error,res){              
                                        if(error) return;
                                        if(res != null){
                                            var time = Date.parse(new Date())/1000;
                                            if((time < parseInt(res))){
                                                var newData  = dataObj;
                                                newData['retcode'] = '409002';                                          socket.emit('broadcastingListen',[JSON.stringify(newData)]);
                                            }else{//解除禁言
                                    clientRedis.hdel(socket.roomnum + "shutup",socket.uid);                                         process_msg(io,socket.roomnum,data_str);
                                                console.log(2);
                                                //消息记录
                                                //LV-2019-03-25
                                    //clientRedis.h(socket.roomnum + "shutup",socket.uid);
                                                // if(socket.uid != socket.roomnum){
                                                    // var timea = Date.parse(new Date());
                                                    // console.log(msg);
                                                    // clientRedis.hset('msglist_'+socket.stream,timea,JSON.stringify(msg));
                                                // }
                                            }
                                        }else{
                                            var timea = Date.parse(new Date());                                 process_msg(io,socket.roomnum,data_str);                        
                                            console.log(3);
                                            //消息记录
                                            //LV-2019-03-25
                                            // if(socket.uid != socket.roomnum){
                                                // console.log(msg);
                                                // clientRedis.hset('msglist_'+socket.stream,timea,JSON.stringify(msg));
                                            // }

3.在改变用户状态时,需要让用户退出特定房间

                    //设置为管理员的加入管理员房间 反之踢出管理员房间
                    if(socket.usertype == 50 ){
                        if(msg.action ==1){
                            //设为管理
                            sockets[msg.touid].usertype = 40;
sockets[msg.touid].join(socket.roomnum+"_40");
                        }else{
                            //取消管理
                            sockets[msg.touid].usertype = 30;
                            var room = socket.roomnum+"_40";
                            sockets[msg.touid].leave(room); 
                        }
                        process_msg(io,socket.roomnum,data_str);
                    }

4.在用户退出房间时,要同时将用户的特定房间属性退出

            socket.leave(socket.roomnum);   
            socket.leave(socket.roomnum+"_40");
            socket.leave(socket.roomnum+"_60");

以上就是在php直播平台源码时聊天功能得重要介绍,在开发中经常涉及根据用户的不同分类对收发消息进行不同的处理方式。
声明:本篇文章为作者 云豹短视频 原创文章,转载请注明出处及作者,本次转载已获授权

标签:socket,res,usertype,直播,clientRedis,msg,php,roomnum,源码
来源: https://blog.51cto.com/yunbaokj/2853603

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有