socketIOS

SocketRocket - facebook

2017-03-17  本文已影响537人  桃逸

socketRocket

WebSocket 协议

百度百科
http://www.tuicool.com/articles/7zyMvy6

HTML5一种新的协议,实现了浏览器与服务器全双工通信,一开始的握手需要借助HTTP请求完成;
传统的HTTP请求采用轮询,而HTTP的header是非常长的,这样会占用很多带宽;
WebSocket API中,浏览器只需要做一个握手的动作,然后,浏览器和服务器之间形成了一条快速通道,两者之间就直接可以数据互相传送;
HTTP的keep-alive是把多个http请求合并为一个,而Websocket是一个新协议;


Paste_Image.png

多出的 Upgrade,Connection字段表明是websocket请求;

1. 测试用例

2. 技术点

NSOperation

NSOperation 方法说明
(void)start; 启动 operation
isFinished, isExecuting 状态标识
在start函数里处理设计要执行的功能

NSURL 使用

NSURLComponents
NSURLQueryItem

BLOCK

block copy ??? 使用copy有什么用途??//[textMessageHandler copy]
__block 定义变量,让block内部可改变

手动KVO

willChangeValueForKey / didChangeValueForKey 即时状态不变化也能触动observation?

DSP

DSP中的block使用self不会引起循环引用,使用weakSelf的是为了减少self的生命周期;因为block肯定会执行;

编译相关

attribute ((vector_size (32))); 占32字节
_Alignof(type-name) 某类型的对齐要求

3. 结构设计

Paste_Image.png

4. 模块

Internal 模块

SRPinningSecurityPolicy : SRSecurityPolicy

使用 Security 框架

SRProxyConnect :NSObject

使用 NSStreamDelegate 代理,使用 CFNetwork 框架;
处理url的代理设置,有代理连接代理,无代理直接访问host;
属性:http与socket代理,SSL支持,输入数据数组

SRDelegateController :NSObject

设置DSP或者Operation来处理delegate的block;

IOConsumerPool :NSObject

存储管理poolSize个SRIOConsumer;

IOConsumer

管理io接口属性

SRRunLoopThread :NSThread 自定义线程类

通过自定义main 中 runloop来控制循环不退出,同时记录线程的 runloop

Utilities 模块

提供各种C接口工具函数

SRHash

对数据进行sha1或者base64编码
SHA1: Secure Hash Algorithm 安全哈希算法
Base64:网络上最常见的用于传输8Bit字节代码的编码方式之一,返回一个字符串;

SRHTTPConnectMessage

根据request,secureKey,协议版本,cookie及协议,来生成一个CFHTTPMessageRef的Http消息头;
CFHTTPMessageSetHeaderFieldValue:设置http消息头的字段,包括GET/Host/Cookie/Authorization/Connection/Sec-WebSocket-Key/Sec-WebSocket-Version/Sec-WebSocket-Protocol以及request中的key字段;

SRURLUtilities
SRSIMDHelpers

对数据进行SIMD的处理,使用多数据流能够加快数据处理

Socket Rocket 模块

Paste_Image.png
SRWebSocket

主要连接接口及数据处理在这里面
SRWebSocketDelegate : handle status and message events
Constructor / open
属性:涉及NSURLRequest、SRSecurityPolicy、SRDelegateController、SRIOConsumer等对象;

10. 名词解释

PAC:代理自动配置,一个PAC文件包含一个JS形式的函数 “FindProxyForURL(url, host)” ;PAC文件中的URL可能是手工配置的,也可能是通过网页的网咯代理自发现协议(Web Proxy Autodiscovery Protocol)自动配置的;

上一篇下一篇

猜你喜欢

热点阅读