Android--推送机制实现原理(二)-自己实现推送功能
来源:互联网 发布:知美术馆(图 编辑:程序博客网 时间:2024/06/02 21:14
我们要实现一个简单的客户端推送功能,要想在Android中建立TCP长连接,就不能使用HttpUrlConnection或者HttpClient等网络请求API,因为它们是属于上层的、HTTP协议的。推送功能需要使用更底层的API,才能实现对TCP协议那一层的操作,Java为开发者提供了网络套接字Socket,它封装了很多TCP的操作。对于移动端来说,一个推送的基本框架需要包含。
- 和服务器端建立连接的功能(长连接)
- 发送数据给服务端的功能 (发送数据)
- 从服务器端接收推送数据的能力 (接收数据)
- 心跳包的实现 (心跳包)
代码实现中,上面每个功能会分别封装成独立的线程,然后通过管理器统筹连接的建立和管理,下面介绍的核心代码都是在线程中实现的。
一、建立长连接
长连接的建立主要是调用Socket类的connect方法实现的,核心代码如下。其中TCP_URL表示服务器端的URL地址,TCP_PORT表示端口号,SOCKET_CONNECT_TIMEOUT表示此次连接的超时时间,这些需要根据具体的需求进行设置。setKeepAlive表示这次连接是长连接。
mSocket = new Socket();mSocket.connect(new InetSocketAddress(TCP_URL, TCP_PORT), SOCKET_CONNECT_TIMEOUT);mSocket.setKeepAlive(true);
 通过以上代码,一个TCP长连接就建立了,当然,生产代码要比上面的复杂得多,比如,需要判断连接是否已经建立,已经存在的话需要关闭重新建立;当手机的网络不可用时,需要增加延时重试机制,在建立Socket连接的过程中出现异常,需要重新建立连接等。
二、发送数据
长连接建立以后,我们需要保存返回的Socket实例,这个实例代表这个长连接的通道,后续移动端和服务器端的数据通信都是通过这个实例进行的,既然有通信,那么需要定义好前后端通信的数据格式,Socket通信发送的是字节数据,通常情况下,一个完整的消息至少包含:协议头+协议主体内容+校验码,数据发送的核心代码如下(为简单起见,发送时协议格式是:协议主体内容长度(两个字节)+主体内容)。
Socket socket = PushSocket.getInstance();//获取Socket实例String content = ....;//发送的数据内容DataOutputStream out = new DataOutputStream(socket.getOutputStream());short len = (short)content.length;out.writeByte(b1);//java short是大端,Linux c short 是小端out.writeByte(b2);out.write(mContent);out.flush();
三、接收数据
四、实现心跳包
0 0
- Android--推送机制实现原理(二)-自己实现推送功能
- Android--推送机制实现原理(三)-自己实现推送功能--建立长连接
- Android--推送机制实现原理(四)-自己实现推送功能--心跳包
- Android--推送机制实现原理(一)
- Android 实现推送功能
- Android 实现推送功能
- Android推送实现原理
- ios消息推送机制原理与实现
- ios消息推送机制原理与实现
- ios消息推送机制原理与实现
- ios消息推送机制原理与实现
- ios消息推送机制原理与实现
- ios消息推送机制原理与实现
- ios消息推送机制原理与实现
- ios消息推送机制原理与实现
- ios消息推送机制原理与实现
- ios消息推送机制原理与实现
- ios消息推送机制原理与实现
- c#关于数组和多态的简单使用
- myeclipse中部署项目到tomcat失败解决办法(错误:If a file is locked ...)
- JS的转换HTML转义符
- hdu 2546 01背包(从一堆物品中尽可能组成接近给定重量的方案)
- 腾讯课堂——IMWeb训练营: Day4 作业
- Android--推送机制实现原理(二)-自己实现推送功能
- XTU 1243 2016 (大数取模+快速幂)
- Win7 64为Sublime Text3 配置python3的开发环境的方法
- C#注册表操作学习
- 京东面试题
- absolute与relative怎么区分
- 5-31 字符串循环左移 (20分)
- Java里面int范围对应的二进制举例分析
- 如何把绿色版的Tomcat做成windows的服务项--自动启动(无需手动)