即时通讯

Socket套接字(二)

2018-12-29  本文已影响7人  春风依旧

一、Scoket简介

二、网络通讯的要素

网络上的请求就是通过Socket来建立连接后互相通信

三、Socket通信流程

Scoket流程.jpg

1、服务器监听:

服务器端套接字并不定位具体的客户端套接字,
而是处于等待连接的状态(也就是上面的阻塞直到客户端连接),
实时监控网络状态,等待客户端的连接请求

2、客户端请求:

客户端初始化Socket提出连接请求,要连接的目标是服务器端的Socket。

3、连接确认:

当服务器端Socket监听到或者说接收到客户端Socket的连接请求时,就响应客户端Socket的请求,
建立一个新的线程,把服务器端Socket的描述发给客户端,一旦客户端确认了此描述,
双方就正式建立连接。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。

四、Socket连接后的几个机制:

1、心跳机制:

心跳一般是客户端每隔一定时间向服务端发送自定义指令,以判断双方是否存活,
因其按照一定间隔发送,类似于心跳一样,所以大家也就都叫它心跳机制

Socket选择TCP传输协议建立了连接,这个TCP协议有一个KeepAlive机制,下面文章也是很明确的指出了为什么不能用TCP协议的KeepAlive机制来做心跳的原因, 总结的观点是: TCP KeepAlive 是用于检测连接的死活,而不是用来检测连接是否可用!而我们的心跳就是为了检测连接死活的同时还要检测连接是否可用!最简单是定时心跳。

2、 PingPong机制:

这个的出现是为了在我们设置的这个心跳间隔之内出现了连接问题

①、当服务端发出一个Ping,客户端没有在约定的时间内返回响应的ack,则认为客户端已经不在线,这时我们Server端会主动断开Scoket连接,并且改由APNS推送的方式发送消息

②、同样当客户端去发送一个消息,因为我们迟迟无法收到服务端的响应ack包,则表明客户端或者服务端已不在线,我们也会显示消息发送失败,并且断开Scoket连接。

PingPong机制.png

3、 断开重连

我们自己主动去断开的Scoket连接(退出登录,App退出到后台等等)是不需要重连。其他的连接断开,我们都需要进行断线重连,一般解决方案是尝试重连几次,如果仍旧无法重连成功,那么不再进行重连。

上一篇下一篇

猜你喜欢

热点阅读