• 如何快速的开发一个完整的iOS直播app(创建房间)


    直播(创建房间)

    • 1.进入主播界面,首先创建房间
    • 2.设计房间模型(key,名称),key作为房间的唯一标识,用来找到房间
    • 3.用socket创建房间,导入socket.io框架
    • 4.一般一个客户端一个socket就好了,可以搞个全局的socket
    • 5.客户端代码(需要封装) 1.一个获取全局的socket 2.一个连接方法封装
    • 6.可以在程序一启动的时候,就建立socket连接
    • 7.每次点击创建房间,直接发送请求就好了
    • 8.监听创建房间是否成功,因为有时候会重名

    创建房间客户端代码

        AppDelegate.m
        [[SocketIOClient clientSocket] connectWithSuccess:^{
            NSLog(@"建议连接成功");
            // 创建房间
            [[SocketIOClient clientSocket] emit:@"createRoom" with:@[item.mj_keyValues]];
        }];
    
        XMGBroadcasterViewController.m
        - (IBAction)createRoom:(id)sender {
        
        // 获取房间名称
        if (_textField.text.length == 0) {
            [SVProgressHUD showImage:nil status:@"请输出房间名称"];
            [SVProgressHUD setDefaultStyle:SVProgressHUDStyleLight];
            
            return;
        }
        
        // 创建房间
        NSString *roomName = _textField.text;
        XMGRoomItem *item = [XMGRoomItem itemWithName:roomName];
        
        
        // 创建房间
        [[SocketIOClient clientSocket] emit:@"createRoom" with:@[item.mj_keyValues]];
        
    }
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view.
        UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"blur"]];
        imageView.frame = self.view.bounds;
        [_preView addSubview:imageView];
        
        // 监听创建房间是否成功
        [[SocketIOClient clientSocket] on:@"createRoomResult" callback:^(NSArray * _Nonnull data, SocketAckEmitter * _Nonnull ack) {
           
            BOOL success = [data[0] boolValue];
            
            if (success) {
                // 进入主播界面,移除高斯模糊
                [_blurView removeFromSuperview];
            } else {
                // 清空文本框
                _textField.text = @"";
                
                // 提示重新输入
                [SVProgressHUD showImage:nil status:@"房间同名,请重新输入房间名称"];
            }
            
            
        }];
        
        
    }
    
    

    创建房间服务端代码

    • 1.每开启一个房间,服务端开启一个socket分组,应该搭建WebSocket服务器
    • 2.服务器代码
    • 3.连接成功后,监听创建房间
      • 1.判断房间名是否重复,使用underScore框架,操作数组,需要用npm下载
      • 2.没有重名,就执行下面操作3,4,5
        • 发送创建房间成功事件,通知客户端
      • 3.保存房间
      • 4.添加socket分组
      • 5.记录当前socket正在直播的房间,一个主播只会开启一个房间,当主播关闭的时候,需要把当前房间移除.
     // 监听创建房间
        clientSocket.on('createRoom',function(data){
    
            // 判断房间名是否一样
            var roomNameArr = Object.keys(rooms).map(function(roomKey){
                return rooms[roomKey];
            })
    
            // 获取结果
            var createRoomResult = underscore.contains(roomNameArr,data.roomName);
    
            // 发送结果给客户端
            serverSocket.emit('createRoomResult',!createRoomResult);
    
            if(createRoomResult == false){
    
                console.log('创建新的房间');
    
                // 之前没有包含房间,可以创建新的房间
                clientSocket.roomKey = rooms[data.roomKey];
    
                // 保存房间
                rooms[data.roomKey] = data.roomName;
    
                // 分组
                
    
    • 9.监听失去连接,需要把当前主播房间移除,分组也移除,因为表示当前主播不播了
     // 失去连接
        // 失去连接
        clientSocket.on('disconnect',function(){
    
            // 清空当前房间
            if(clientSocket.roomKey) {
                
                delete rooms[roomKey];
    
                clientSocket.leave(roomKey);
            }
    
        });

  • 相关阅读:
    open("","r")与open("","rb")的效率区别
    readline与readlines不能同时使用
    for i in xrange(0,5)使用过程中遇到的问题
    xrange()与range()
    Maven install 、 Maven package 与 Maven clean package 的区别
    Java--mv clean package命令
    Java----如何解决下载依赖包失败问题
    Jmeter工具学习(六)-- 逻辑控制器 While Controller(转载)
    Jmeter工具学习(五)--JDBC Request执行多条SQL语句
    Sqlmap POST注入 三种方法(转载)
  • 原文地址:https://www.cnblogs.com/hanease/p/16253187.html
Copyright © 2020-2023  润新知