iOS 智能家居SRWebSocket使用

公司是做智能家居的,通過網(wǎng)關(guān)來操控各種設(shè)備。因為要保持App狀態(tài)和設(shè)備狀態(tài)一致,也就是說手動操控設(shè)備時,App端要看見設(shè)備的變化,所以選用socket進行長連接。

1.導(dǎo)入SRWebSocket

通過CocoaPods進行導(dǎo)入配置

通過手動導(dǎo)入并配置

github下載地址 SRWebSocket
1> 將下載的文件導(dǎo)入工程中

SRWebSocket

2> 添加相關(guān)的配置文件

libicucore.tbd
CFNetwork.framework
Security.framework
Foundation.framework

2.代碼實現(xiàn)

導(dǎo)入頭文件
#import "SRWebSocket.h"
遵守協(xié)議
<SRWebSocketDelegate>
// 與websocket建立連接
- (void)reconnect{
    self.webSocket.delegate = nil;
    [self.webSocket close];
    self.webSocket = nil;

// url根據(jù)公司的要求,樣式和參數(shù)不同
    self.webSocket = [[SRWebSocket alloc] initWithURLRequest:[NSURLRequest requestWithURL:url]];
    self.webSocket.delegate = self;
    
    [self.webSocket open];

webSocket的地址是以ws://開頭

#pragma mark - SRWebSocketDelegate // 代理方法
// 連接成功
- (void)webSocketDidOpen:(SRWebSocket *)webSocket{

    [self sendHeart];
//每90秒發(fā)送一次心跳
    [NSTimer scheduledTimerWithTimeInterval:90 target:self selector:@selector(sendHeart) userInfo:nil repeats:YES];
//  心跳間隔時間和心跳內(nèi)容詢問后臺
    NSLog(@"Websocket Connected");
}
// 連接失敗
- (void)webSocket:(SRWebSocket *)webSocket didFailWithError:(NSError *)error{
// 這里可進行重連
    NSLog(@":( Websocket Failed With Error %@", error);
}
// 接收數(shù)據(jù)
- (void)webSocket:(SRWebSocket *)webSocket didReceiveMessage:(id)message{
// 在這里進行數(shù)據(jù)的處理
    NSLog(@"%@",message);
}
// 連接關(guān)閉
- (void)webSocket:(SRWebSocket *)webSocket didCloseWithCode:(NSInteger)code reason:(NSString *)reason wasClean:(BOOL)wasClean{
// 判斷是何種情況的關(guān)閉,如果是人為的就不需要重連,如果是其他情況,就重連
    NSLog(@"webSocket Closed!");
}
// 接收服務(wù)器發(fā)送的pong消息
- (void)webSocket:(SRWebSocket *)webSocket didReceivePong:(NSData *)pongPayload{
    NSLog(@"Websocket received pong");
}
// 發(fā)送心跳
- (void)sendHeart{ 
    NSString *heartBeat = @"心跳";
    @try {
        [self.webSocket send:heartBeat];
    } @catch (NSException *exception) {
       //  發(fā)送心跳出錯
        [self reconnect];
    }
   
}
//  給服務(wù)器發(fā)送信息
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    // 信息格式詢問后臺
    NSString *message = @"message";
    [self.webSocket send:message];
}
在需要的地方調(diào)用reconnect方法,建立連接。
在結(jié)束使用的時候
    [self.webSocket close];
    self.webSocket = nil;
    self.webSocket.delegate = nil;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容