安卓 socket通信原理 心跳机制 面试必备

为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端- - 套接字的地址和端口号,然后就向服务器端套接字提出连接请求。 连接确认:当服

务器端套接字监听到或者说接收到客户端套接字的连接请求时,就响应客户端套接

字的请求,建立一个新的线程,把服务器端套接字的描述发 给客户端,一旦客户端

确认了此描述,双方就正式建立连接。而服务器端套接字继续处于监听状态,继续

接收其他客户端套接字的连接请求。

SOCKET 连接与 TCP

创建 Socket 连接时,可以指定使用的传输层协议,Socket 可以支持不同的传输层协议(TCP

或 UDP),当使用 TCP 协议进行连接时,该 Socket 连接就是一个 TCP 连接。

Socket 连接与 HTTP 连接

由于通常情况下 Socket 连接就是 TCP 连接,因此 Socket 连接一旦建立,通信双方即可开

始相互发送数据内容,直到双方连接断开。但在实际网 络应用中,客户端到服务器之间的

通信往往需要穿越多个中间节点,例如路由器、网关、防火墙等,大部分防火墙默认会关闭

长时间处于非活跃状态的连接而导致 Socket 连接断连,因此需要通过轮询告诉网络,该连

接处于**活跃状态。

而** HTTP 连接使用的是“请求—响应”的方式,不仅在请求时需要先建立连接,而且需要客户

端向服务器发出请求后,服务器端才能回复数据。

很多情况下,需要服务器端主动向客户端推送数据,保持客户端与服务器数据的实时与同步

此时若双方建立的是 Socket 连接,服务器就可以直接将数 据传送给客户端;若双方建立的

是 HTTP 连接,则服务器需要等到客户端发送一次请求后才能将数据传回给客户端,因此,

客户端定时向服务器端发送连接请求, 不仅可以保持在线,同时也是在“询问”服务器是否

有新的数据,如果有就将数据传给客户端。TCP(Transmission Control Protocol) 传输控制

协议

socket 断线重连实现

正常连接断开客户端会给服务端发送一个 fin 包,服务端收到 fin 包后才会知道连接断开。而

断网断电时客户端无法发送 fin 包给服务端,所以服务端没办法检测到客户端已经短线。 为

了缓解这个问题,服务端需要有个心跳逻辑,就是服务端检测到某个客户端多久没发送任何

数据过来就认为客户端已经断开, 这需要客户端定时向服务端发送心跳数据维持连接。

心跳机制实现

长连接的实现:心跳机制,应用层协议大多都有 HeartBeat 机制,通常是客户端每隔一小段

时间向服务器发送一个数据包,通知服务器自己仍然在线。并传输一些可能必要的数据。使

用心跳包的典型协议是 IM,比如 QQ/MSN/飞信等协议

1、在 TCP 的机制里面,本身是存在有心跳包的机制的,也就是 TCP 的选项:SO_KEEPALIVE。

系统默认是设置的 2 小时的心跳频率。但是它检查不到机器断电、网线拔出、防火墙这些断

线。 而且逻辑层处理断线可能也不是那么好处理。一般,如果只是用于保活还是可以的。

通过使用 TCP 的 KeepAlive 机制(修改那个 time 参数),可以让连接每隔一小段时间就产

更多Android高级工程师进阶学习资料

进阶学习视频

附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题(含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)

里面包含不同方向的自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中…
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!
oid学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值