直播(创建房间)
- 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];
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);
}
});
作者:袁峥
链接:https://www.jianshu.com/p/7f15bbb679b9
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
|