在App与服务器需要高频通信,或者服务器主动推送消息到App的情况下,就需要通过长连接来实现。比如聊天和股票软件。
下面介绍iOS中如何通过GCDAsyncSocket来实现长连接。
GCDAsyncSocket介绍
建立连接
1、创建socket对象,delegateQueue可以指定代理方法执行的队列。
-(GCDAsyncSocket*)socket
{
if (_socket == nil)
{
_socket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)];
}
return _socket;
}
2、连接到指定服务器
NSError *error = nil;
// host:域名或ip,port:端口号,timeout:超时时间
if (![self.socket connectToHost:host onPort:port withTimeout:timeout error:&error])
{
NSLog(@"socket连接服务器错误:%@", error);
}
#pragma mark- GCDAsyncSocketDelegate
-(void)socket:(GCDAsyncSocket *)sock didConnectToHost:(NSString *)host port:(uint16_t)port
{
NSLog(@"socket成功建立。");
}
-(void)socketDidDisconnect:(GCDAsyncSocket *)sock withError:(NSError *)error
{
NSLog(@"链接出错:error:%@", error);
}
3、进行TLS验证(可选)
// 打包到App中的根证书
-(NSData *)certData
{
if(!_certData)
{
_certData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"root_cert"
ofType:@"cer"]];
}
re