直播系统源码中关于直播间人数统计功能的开发流程

通常在直播系统源码中,直播间人数是非常重要的统计数据,由于需要统计实时的人数,因此需要如下处理。
1.当用户进入和退出直播间,触发进入和退出直播间的广播,通知客户端增减人数。
2.当新用户进入直播间时,要给该用户提供相应的房间人数的数据
3.在数据库中存储累计人数,用于统计
4.Redis中存储用户列表,方便用户列表的相关功能使用
处理代码如下:
1.进入房间部分

//进入房间
	socket.on('conn', function(data) {

		if(!data || !data.token){
				return !1;
		}
		userid=data.uid;
		old_socket = sockets[userid];
		if (old_socket && old_socket != socket) {
			
			if(data.uid != data.roomnum && data.uid==old_socket.roomnum){
                /* 进房间 但旧链接是 主播 */
                var data_str='{"retmsg":"ok","retcode":"000000","msg":[{"msgtype":"1","_method_":"StartEndLive","action":"19","ct":"直播关闭"}]}';
				old_socket.emit('broadcastingListen',[data_str]);
			}else if(data.uid== data.roomnum && data.stream==old_socket.stream){
                /* 主播重连 */
				old_socket.reusing = 1;
				//console.log("重用");
			}else if(data.uid== data.roomnum && data.stream!=old_socket.stream){
                /* 主播多端开播 */
				var data_str='{"retmsg":"ok","retcode":"000000","msg":[{"msgtype":"1","_method_":"StartEndLive","action":"19","ct":"直播关闭"}]}';
				old_socket.emit('broadcastingListen',[data_str]);
			}
			old_socket.disconnect()
		}
		
		clientRedis.get(data.token,function(error,res){
			if(error){
				return;
			}else if(res==null){
				//console.log("[获取token失败]"+data.uid);
			}else{
				if(res != null){
					
					var userInfo = evalJson(res);
					if(userInfo['id'] == data.uid ){
						//console.log("[初始化验证成功]--"+data.uid+"---"+data.roomnum+'---'+data.stream);
						//获取验证token
						socket.token   = data.token; 
						socket.roomnum = data.roomnum;
						socket.stream = data.stream;
						socket.nicename = userInfo['user_nicename'];
						socket.level = userInfo['level'];
						socket.avatar = userInfo['avatar'];
						socket.sign = Number(userInfo['sign']);
						socket.usertype   = parseInt(userInfo['usertype']);
						socket.uid     = data.uid;
						socket.reusing = 0;
						
						socket.join(data.roomnum);
						sockets[userid] = socket;
						socket.emit('conn',['ok']);
                        
						if( socket.roomnum!=socket.uid && socket.uid >0 ){
                            /* 处理有时 无座驾信息会崩溃的问题 */
                            var car_id='0';
                            var car_swf='';
                            var car_swftime='';
                            var car_words='';
                            if(userInfo.hasOwnProperty("car")){
                                var carinfo=userInfo['car'];
                                if(carinfo.hasOwnProperty("id")){
                                    car_id=carinfo['id'];
                                }
                                if(carinfo.hasOwnProperty("swf")){
                                    car_swf=carinfo['swf'];
                                }
                                if(carinfo.hasOwnProperty("swftime")){
                                    car_swftime=carinfo['swftime'];
                                }
                                if(carinfo.hasOwnProperty("words")){
                                    car_words=carinfo['words'];
                                }
                            }
                            
							va
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值