热门搜索 :
考研考公
您的当前位置:首页正文

iOS简单的WebSocket连接

来源:东饰资讯网

概述WebSocket

1.1 为什么我们需要WebSocket这样的实时的通信协议?

WebSocket是web通信方式的一种,像我们熟知的HTTP协议也是web通信方式的一种。但是我们知道HTTP协议是一种无状态的协议,其服务端本身不具备识别客户端的能力,必须借助外部的一些信息比如说session和cookie,才能与特定的客户端保持通信。也就是说我们所发送的每一个HTTP的请求都会带上请求头中一些相应的信息还有cookie,这明显会增加我们传输的信息的体量从而带来一定的网络延迟,对于一些对通信的实时性要求比较高的应用来说就是不可忍受的了,比如说聊天程序或者是运行在浏览器中的实时小游戏。最郁闷的却还是这些头信息和cookie往往对于服务器响应客户端的请求来说是多余的,也就是说虽然我每个请求都带了这些信息,但是服务器与客户端的交互过程中可能根本用不上这些信息。

为了改善HTTP请求的这种网络延迟的情况,也出现了一些适应不同需求的其他的[web通信]方式,比如说:轮询,长轮询(long-polling),数据流,EventSouce等等,WebSocket便是其中一种。

实际上大多数基于因特网(或者局域网)的网络链接通常都包含长连接和基于TCP套接字的双向消息交换。但是TCP协议是属于最底层的网络通信协议了,让一些不能信任的客户端脚本去访问底层的TCP套接字显然是不太安全的,因此WebSocket实现了一种较为安全的方案,它允许客户端脚本在客户端和支持WebSocket协议的服务器之间创建双向的套接字连接。从而使实时通信的某些网络操作变得简单。

1.2 WebSocket是如何工作的?

我们知道了WebSocket的主要作用是,允许服务器端与客户端进行全双工(full-duplex)的实时通信。这里有个例子特别好:HTTP协议像发电子邮件,发出后必须等待对方回信;WebSocket则是像打电话,服务器端和客户端可以同时向对方发送数据,它们之间存着一条持续打开的数据通道。

项目搭建

1.创建工程并导入pod框架添加SRWebSocket

platform:ios, '8.0'

use_frameworks!
inhibit_all_warnings!           #取消三方框架导致的警告
target 'WebSocketDemo' do
pod 'SocketRocket'
end

2.SRWebSocket初始化设置

#import "ViewController.h"
#import <SocketRocket/SRWebSocket.h>

@interface ViewController ()<SRWebSocketDelegate>

@property (nonatomic, strong) SRWebSocket *webSocket;

@end

@implementation ViewController

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    [self webSocketConnect];
}

- (void)viewDidDisappear:(BOOL)animated
{
    [super viewDidDisappear:animated];
    self.webSocket.delegate = nil;
    [self.webSocket close];
    self.webSocket = nil;
}

// 初始化
- (void)webSocketConnect
{
    self.webSocket.delegate = self;
    [self.webSocket close];
    
    self.webSocket = [[SRWebSocket alloc] initWithURLRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"自己服务器聊天地址"]]];
    self.webSocket.delegate = self;
    self.title = @"Opening Connecting";
    NSLog(@"------222------");
    [self.webSocket open];
}

3.SRWebSocketDelegate

//连接成功
//代理方法实现
#pragma mark - SRWebSocketDelegate
- (void)webSocketDidOpen:(SRWebSocket *)webSocket
{
    NSLog(@"WebSocket Connect");
    self.title = @"Connected!";
}

// 连接失败
- (void)webSocket:(SRWebSocket *)webSocket didFailWithError:(NSError *)error
{
    NSLog(@"Websocket Failed With Error --- %@", error);
    
    self.title = @"Connection Failed! (see logs)";
    self.webSocket = nil;
}

// 接收到新消息的处理
- (void)webSocket:(SRWebSocket *)webSocket didReceiveMessage:(id)message
{
    NSLog(@"接收到Message-----%@",message);
}

// 连接关闭
- (void)webSocket:(SRWebSocket *)webSocket didCloseWithCode:(NSInteger)code reason:(NSString *)reason wasClean:(BOOL)wasClean
{
    NSLog(@"Closed Reason:%@",reason);
    self.title = @"Connection Closed! (see logs)";
    self.webSocket = nil;
}

下载

扩展阅读


结束语

到这里就结束了,如若不懂的话可以👇留言,也可以加入群讨论
喜欢的话 记得关注、收藏、点赞哟

群号:

Top