iOS SRWebSocket原理分析及API使用

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

以前浏览器实现即时通讯是通过轮询(long poll 和 ajax)技术解决,但是有很大的弊端,比如通讯延时、流量浪费等。直到WebSocket出现才有助于解决这一问题。

WebSocket protocol 是HTML5一种新的协议。它实现了浏览器与服务器全双工通信(full-duplex)。一开始的握手需要借助HTTP请求完成。
WebSocket和HTTP、FTP一样也是应用层的协议,但是它是一种双向通信协议,是建立在TCP/IP之上的。
在WebSocket中,只需要服务器和浏览器通过HTTP协议进行一个握手的动作,然后单独建立一条TCP的通信通道进行数据的传送。
连接的过程是:
首先,客户端发起http请求,经过3次握手后,建立起TCP连接;http请求里存放WebSocket支持的版本号等信息,如:Upgrade、Connection、WebSocket-Version等;
然后,服务器收到客户端的握手请求后,同样采用HTTP协议回馈数据;
最后,客户端收到连接成功的消息后,开始借助于TCP传输信道进行全双工通信。

下面介绍一下基于WebSocket的开源的即时通讯框架SRWebSocket的API使用。

首先要导入webSocket的包,git下载地址https://github.com/square/SocketRocket

1,在需要的类引入#import “SRWebSocket.h”;
2,初始化开始连接:

SRWebSocket * tempWebSocket = [[SRWebSocket alloc] initWithURLRequest:request];

    _webSocket = tempWebSocket;

    _webSocket.delegate = self;

    [_webSocket open];

3,连接成功后会调用代理方法didOpen,需要实现SRWebSocketDelegate代理的几个方法:

- (void)webSocketDidOpen:(SRWebSocket *)webSocket;
- (void)webSocket:(SRWebSocket *)webSocket didReceiveMessage:(id)message;
- (void)webSocket:(SRWebSocket *)webSocket didFailWithError:(NSError *)error;
- (void)webSocket:(SRWebSocket *)webSocket didCloseWithCode:(NSInteger)code reason:(NSString *)reason wasClean:(BOOL)wasClean;

其中didReceiveMessage会返回收到的消息;
4,发送消息:

 [_webSocket send:(id)data];

5、关闭webSocket连接:

[_webSocket close];

然后在代理方法didCloseWithCode设置:

_webSocket.delegate = nil;
_webSocket = nil;

至此,大功告成!

iOS通过SocketRocket实现websocket的即时聊天 最近项目中要做即时通讯功能, 但没打算使用环信,融云等三方平台, 我查了一下资料,ios端实现起来还是比较简单的 ,我也写了一个小demo,和大家分享一下首先到getHub上下载一个 FaceBook的 SocketRocket, 然后倒入工程; 我是直接使用 pod导入SocketRocket首先pod导入SocketRocketplatform :ios, '8.0' pod 'SocketRo 阅读详情

相关推荐

ios websocket 使用详解

负载数据的长度为扩展数据及应用数据之和,扩展数据的长度可能为0,因而此时负载数据的长度就为应用数据的长度。Extension data: x位,如果客户端与服务端之间没有特殊约定,那么扩展数据的长度始终为0,任何的扩展都必须指定扩展数据的长度,或者长度的计算方式,以及在握手时如何确定正确的握手方式。如果存在扩展数据,则扩展数据就会包括在负载数据的长度之内。即:websocket分为。Application data: y位,任意的应用数据,放在扩展数据之后,应用数据的长度=负载数据的长度-扩展数据的长度。

Rey的技术博客 1752

iOS】—— 实现WebSocket发送消息(SocketRocket第三方库的使用和解析)

偶然之间了解到了利用WebSocket实现后端和前端的相互发送消息,就查了查在iOS里这个东西该怎么写,用舍友写的接口简单实现了两个用户的通信。

m0_62386635的博客 4025

SocketRocket库实战指南:iOS平台WebSocket通信实现

本文还有配套的精品资源,点击获取 简介:WebSocket协议提供了一种持久、高效的实时通信方式,适合需要双向数据流动的应用场景。SocketRocket库作为iOS平台上的一个高效、稳定的WebSocket库,支持线程安全、自动重连以及丰富的错误处理机制。该库还保持与旧版HTTP/HTTPS协议的兼容性,并提供了易于集成的API。本文档旨在指导开发者如何使用SocketR...

weixin_35756373的博客 2220

基于SRWebSocketWebSocket长连接

背景 搭建稳定及轻量的长链接能力,应用于业务方的消息提醒、状态更新等即时任务,同时也方便web应用的快速接入。 WebSocket是基于Http协议的,或者说借用了Http协议来完成一部分握手,在握手阶段与Http是相同的,握手成功后建立双向的socket通道。由于WebSocket的握手类似于Http协议,所以WebSocket的建联也支持常规的http配置,如请求头(包含cookie)、超时时长。 ...

风·之痕的博客 2310

iOS SRWebSocket简单使用

一、首先下载SRWebSocket,通过git或cocoapods。然后导入以下库:否则会报错:二、代码1.引头文件,设置代理<SRWebSocketDelegate>2.初始化NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@""]...

KONGYU_210的博客 4273

SRWebSocket源码浅析(上)

2017-06-12 涂耀辉 Cocoa开发者社区 一. 前言: WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工(full-duplex)通信——可以通俗的解释为服务器主动发送信息给客户端。 区别于MQTT、XMPP等聊天的应用层协议,它是一个传输通讯协议。它有着自己一套连接握手,以及数据传输

cleven 3105

SRWebSocket 源码介绍

SRWebSocket WebSocket协议是基于TCP的网络协议。区别于MQTT、XMPP等聊天的应用协议,它是一个传输通讯协议,有自己的一套连接握手、以及数据传输的规范,WebSocket的数据传输是frame形式传输的,而SRWebSocket是facebook提供的。 0 1 2 ...

weixin_34198453的博客 1167

SRWebSocket源码浅析

本文来自简书,原文地址:http://www.jianshu.com/p/cdb7a886789a 一. 前言: WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工(full-duplex)通信——可以通俗的解释为服务器主动发送信息给客户端。区别于MQTT、XMPP等聊天的应用层协议,它是一个传输通讯协议。它有着自己一套连接握手,以及数据传输的规范。而本

努力,可能成功!放弃,注定失败! 5001

WebSocket 及 SocketRocket 库

Websocket 及 Objective-C 中的使用1. WebSocket1.1 概述1.1 握手1.1.1 打开阶段握手1.1.2 关闭阶段握手2. 数据帧2.1 基本帧协议2.2 分片2. SocketRocket2.1 API 调用2.2 粘包问题2.3 源码分析 参考资料:RFC6455 - The WebSocket Protocol 1. WebSocket 1.1 概述 WebSocket 是独立的,基于 TCP 的协议,它使用单个 TCP 连接进行双向传输。WebSocket 协议

Kingyu Luk's Blog 1071

iOS —— WebSocket

WebSocket同HTTP一样也是应用层的协议,但是它是一种双向通信协议,是建立在TCP之上的。Socket 是TCP/UDP协议的API,发生在传输层。 WebSocket与HTTP的区别 相同点 都是一样基于TCP的,都是可靠性传输协议。 都是应用层协议。 不同点 WebSocket是双向通信协议,模拟Socket协议,可以双向发送或接受信息。HTTP是单向的。 WebSocke...

SHTLoveXX的专栏 591

SRWebSocket源码浅析(下)

接上文) 四. 接着来讲讲数据的读和写: 当建立连接成功后,就会循环调用这么一个方法: //读取http头部 - (void)_readHTTPHeader; {     if (_receivedHTTPHeaders == NULL) {         //序列化的http消息         _rece

cleven 606

IOS SRWebSocket使用

首先你要确定你的SRWebSocket是从git或者通过pod安装的。 在你的工程里面导入SRWebSocket所有文件,在你需要的地方引入SRWebSocket.h文件。 接着就是我们的实例化。     _webSocket.delegate = nil;     [_webSocket close];     _webSocket = [[SRWebSo

a174455171的专栏 8489

webSocket开源框架:简单的使用

需要用到webSocket,所以搜集了一下使用方法,(手动包 导入要把#import git下载地址:square/SocketRocket gitHUB 上没有看懂,就要 cocoaPod 导入了 socketRocket 导入这个包然后添加所需要的框架 导入头文件 #import"SRWebSocket.h" 代码

vvqlql的博客 2348

SocketRocket API手册:SRWebSocket核心方法与委托协议详解

WebSocket(套接字)技术已成为实时通信的基石,但开发者常面临连接不稳定、协议处理复杂等痛点。SocketRocket作为iOS/macOS平台的高性能WebSocket客户端库,通过简洁API封装了RFC 6455标准的复杂细节。本文将系统剖析其核心类`SRWebSocket`的初始化方法、状态管理、数据传输及委托回调机制,帮助开发者快速构建可靠的实时通信功能。 ## 一、核心类与初始化...

gitblog_00006的博客 754

webSocket通讯

1、使用facebook第三方SRWebSocket进行websocket通讯。   pod 'SocketRocket' 2、通讯地址:   ws://192.168.1.128:18882/ws   注意:socket通讯都是用ws开头的 3、初始化   _webSocket = [[SRWebSocketalloc] initWithURL:[NSURLURLWithStr...

weixin_30896511的博客 172

SocketRocket的基本使用方法

WebSocket与普通网络请求的区别 WebSocket是建立的长链接,既建立连接后持续受到数据,普通的网络请求建立一次连接后只能请求一次数据,想要再次请求数据必须再次建立网络连接。 WebSocket使用场景 可以用来做实时通讯和实时绘制折线图之类的需要一直保持数据请求的地方 cocopods导入WebSocket podfile 里写pod 'SocketRocket'

yanlong_bao的博客 1万+

iOS websocket 及时通讯实现

     2015-09-03 by 木易哥哥 智者精选,每天获取励志认知能量 www.5izhjx.com   开发一个类似QQ、微信的即时IM聊天功能,做到实时监控消息,需要用的技术是websocketWebSocket protocol 是HTML5一种新的协议。它实现了浏览器与服务器全双工通信(full-duplex)。在 WebSocket API,浏览器和服务器只需要要做一个握手的动...

木易哥哥的专栏 2万+

微信,QQ这类IM app怎么做——谈谈Websocket

前言 关于我和WebSocket的缘:我从大二在计算机网络课上听老师讲过之后,第一次使用就到了毕业之后的第一份工作。直到最近换了工作,到了一家是含有IM社交聊天功能的app的时候,我觉得我现在可以谈谈我对WebSocket/Socket的一些看法了。要想做IM聊天app,就不得不理解WebSocket和Socket的原理了,听我一一道来。 目录 1.WebSocket使用场景

烽火连城的博客 2007
上一篇: iOS crash捕获异常崩溃日志
下一篇: WebSocket 和socket、HTTP的区别和联系
SL_ideas
博客等级 码龄9年 16粉丝 8原创
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值