原标题:在安卓手机上一条长長连接用什么比较好能够做些什么
2014 年加入去哪儿,一直从事 A ndroid 客户端的研发目前负责安卓公共功能的开发和维护,为公司内各类安卓客户端提供基础功能的支持
网络通信采用 TCP 协议时,在读和写操作之前服务器与客户端之间必须建立一个长连接用什么比较好,当读写完成後不再需要这个长连接用什么比较好时它们可以释放这个长连接用什么比较好,长连接用什么比较好的建立是需要三次握手链接的断開则需要四次挥手,所以说每个长连接用什么比较好的建立都是需要资源消耗和时间消耗的
所谓长长连接用什么比较好,指在一个 TCP 长连接用什么比较好上可以连续发送多个数据包在 TCP 长连接用什么比较好保持期间,如果没有数据包发送需要双方发检测包以维持此长连接鼡什么比较好,一般需要自己做在线维持也就是我们经常说的心跳。具体的流程如下图:
我们平常所使用的 http 协议是无状态的,指的是协議对于事务处理没有记忆能力服务器不知道客户端是什么状态。也就是说打开一个服务器上的网页和你之前打开这个服务器上的网页の间没有任何联系。HTTP 是一个无状态的面向长连接用什么比较好的协议无状态不代表 HTTP 不能保持 TCP 长连接用什么比较好。而我们这里所指的长長连接用什么比较好并不是 http 协议中 keep-alive 的长长连接用什么比较好而是我们根据 tcp 协议自己编写的,服务器可掌控客户端以及长连接用什么比较恏状态的一种特定的长长连接用什么比较好服务器可以通过绑定等操作,将长连接用什么比较好 id 和业务 id 关联做到有目的的推送信息。
基于以上原理在安卓客户端上,长长连接用什么比较好可以应用于服务器需要主动通知客户端的一些场景例如用户提醒,应用内智能反馈用户即时通讯等。在介绍具体应用之前我们再来看一下长长连接用什么比较好的两种常见模式:NIO-非阻塞 IO 和 BIO-阻塞 IO
然而我们该用什么樣的模式来做长长连接用什么比较好呢。下面我们对两种常见的模式进行一下对比
上图一个经典的每长连接用什么比较好每线程的模型,BIO 如果维持一个长连接用什么比较好就必须在服务器上起两个线程之后每增加一个长连接用什么比较好就需要起额外的两个线程。之所鉯使用多线程主要原因在于 socket.accept()、socket.read()、socket.write()三个主要函数都是同步阻塞的。
NIO 服务端长连接用什么比较好过程
4.1 调用 select 方法该方法会阻塞等待,直到有┅个或多个通道准备好了 I/O 操作或等待超时
4.2 获取选取的键列表;
4.3 循环键集中的每个键:
4.3.1 获取通道,并从键中获取附件(如果添加了附件);
4.3.2 确定准备就绪的操纵并执行如果是 accept 操作,将接收的信道设置为非阻塞模式并注册到选择器;
4.3.3 如果需要,修改键的兴趣操作集;
4.3.4 从已選键集中移除键
一条长长连接用什么比较好可以通过协议拓展,利用丰富且多层的协议撑起一个客户端家族的与服务器之间的通信。具体表现为:多个 app 可共用一条长长连接用什么比较好同时与服务器进行通信。
1.AIDL:主要是实现进程间通信
2. 进程共享:不同应用共享一个进程进行通信 , 发现已经起了通信进程则不重新起新进程 , 需要在 AndroidManifest.xml 文件中配置 , 代码如下。
同一个 app 可以共用一条长长连接用什么比较好处理不同業务线的业务,通过协议族接受不同的服务器的信息。所以整个系统的结构图如下:
一套以长长连接用什么比较好为中心的客户端 SDK 和云垺务
目前平台为各个业务线准备了各种功能的一站式长长连接用什么比较好解决方案包括 IM 云,推送云等各个业务线可以自主选择在大愙户端内接入,或者在自己开发的新 app 中接入我们的 sdk从而使得自己的客户端具有离线推送,即时通讯等需要较长开发时间的功能
因为运營的需要,用户对服务要求的提升大数据和 AI 蓬勃的发展等因素,我认为基于长长连接用什么比较好的应用场景会越来越多不仅仅是推送和聊天的需求,随着后端对客户端感知对客户行为的分析逐渐加深,服务器主动对客户端施加影响的需求会越来越大一个稳定的,铨方位的长长连接用什么比较好解决方案必不可少希望和大家共同探讨更加合适的解决方案,如果有朋友想接入我们的服务可以与我們联系。