如何快速的開發一個完整的iOS直播app(建立房間)
阿新 • • 發佈:2022-05-10
直播(建立房間)
- 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);
}
});