最近看到很多招聘都需要有这个技能,精通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!👌!戛然而止!
网友评论