内卷面试题收藏故事

iOS网络编程socket

2021-07-13  本文已影响0人  测试账号

 最近看到很多招聘都需要有这个技能,精通socket网络编程,而我接触的好像都是直接用的第三方,融云IM或者七牛啥的。好奇心让我去大概了解了下,以下为个人了解思路。

一、基础层

1.通信离不开协议,即TCP/UDP协议,socket即时通讯也是在此基础上面进行了封装。先来看这俩协议区别:

TCP协议:传输需要建立安全连接,即三次握手连接,四次挥手断开连接。传输过程安全可靠,确定就是慢,毕竟每次连接都需要建立安全连接。

UDP协议:无需建立安全连接,可以直接进行数据传输,UDP数据段进行传输,网上写的每段最大不超过64k。传输过程快,但是容易丢包,毕竟没建立安全传输通道,直接传输的。

2.上层协议封装,供http协议使用。主要用于客户端主动发起通信,收到响应请求结束,在请求结束后,会主动释放连接。一次一连接,也叫短链接,无状态协议。

3.上层协议封装,作为socket通信基础,服务端和客户端建立长连接。服务端可主动将消息推送给客户端。

然后再回到iOS的socket网络编程

二、iOS层

1.BSDSocket

iOS基于C语言的开发,最底层作为socket的是BSDSocket,这个库,封装了socket的一些基本操作,包括建立连接,数据的读写。

服务端:1>.监听连接请求   2>接收连接请求   3>数据传输    4>关闭连接   

客户端 :2>建立连接       2>数据传输     3>关闭连接

2.CFSocket

iOS在BSDSocket基础上,又加入了自己的RunLoop规则,即"接受消息->等待->处理" 的循环中“

基本功能一致,并且包含了少数开销。

服务端:1>创建socket  2> 绑定本地IP和端口到Socket   3>获取当前线程的runloop并把服务端Socket加入到RunLoop中,启动RunLoop  4>创建对应客户端socket的输入输出流

客户端:1>直接创建对应服务端的IP和端口的Socket  2>并创建对应的输入输出流  3>创建对应客户端socket的输入输出流

ok!👌!戛然而止!

上一篇 下一篇

猜你喜欢

热点阅读