iOS 智能家居SRWebSocket使用

公司是做智能家居的,通过网关来操控各种设备。因为要保持App状态和设备状态一致,也就是说手动操控设备时,App端要看见设备的变化,所以选用socket进行长连接。

1.导入SRWebSocket

通过CocoaPods进行导入配置

通过手动导入并配置

github下载地址 SRWebSocket
1> 将下载的文件导入工程中

iOS 智能家居SRWebSocket使用_第1张图片
SRWebSocket

2> 添加相关的配置文件

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

2.代码实现

导入头文件
#import "SRWebSocket.h"
遵守协议

// 与websocket建立连接
- (void)reconnect{
    self.webSocket.delegate = nil;
    [self.webSocket close];
    self.webSocket = nil;

// url根据公司的要求,样式和参数不同
    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秒发送一次心跳
    [NSTimer scheduledTimerWithTimeInterval:90 target:self selector:@selector(sendHeart) userInfo:nil repeats:YES];
//  心跳间隔时间和心跳内容询问后台
    NSLog(@"Websocket Connected");
}
// 连接失败
- (void)webSocket:(SRWebSocket *)webSocket didFailWithError:(NSError *)error{
// 这里可进行重连
    NSLog(@":( Websocket Failed With Error %@", error);
}
// 接收数据
- (void)webSocket:(SRWebSocket *)webSocket didReceiveMessage:(id)message{
// 在这里进行数据的处理
    NSLog(@"%@",message);
}
// 连接关闭
- (void)webSocket:(SRWebSocket *)webSocket didCloseWithCode:(NSInteger)code reason:(NSString *)reason wasClean:(BOOL)wasClean{
// 判断是何种情况的关闭,如果是人为的就不需要重连,如果是其他情况,就重连
    NSLog(@"webSocket Closed!");
}
// 接收服务器发送的pong消息
- (void)webSocket:(SRWebSocket *)webSocket didReceivePong:(NSData *)pongPayload{
    NSLog(@"Websocket received pong");
}
// 发送心跳
- (void)sendHeart{ 
    NSString *heartBeat = @"心跳";
    @try {
        [self.webSocket send:heartBeat];
    } @catch (NSException *exception) {
       //  发送心跳出错
        [self reconnect];
    }
   
}
//  给服务器发送信息
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    // 信息格式询问后台
    NSString *message = @"message";
    [self.webSocket send:message];
}
在需要的地方调用reconnect方法,建立连接。
在结束使用的时候
    [self.webSocket close];
    self.webSocket = nil;
    self.webSocket.delegate = nil;

你可能感兴趣的:(iOS 智能家居SRWebSocket使用)