安卓websocket 封装基于Java-websocket
本文借鉴于https://blog.csdn.net/u013872857/article/details/79190643感谢大神的贡献
借鉴文章所用websocket 第三方是:nv-websocket-client:2.2,
而这里所用的是:Java-WebSocket:1.3.0
核心代码如下:
public abstract class MyWebSocketService extends Service implements IWebSocket { private static final String TAG = MyWebSocketService.class.getSimpleName();
private ServiceBinder binder = new ServiceBinder(); private int connectStatus = 0; private WebSocketThread webSocketThread;
private WebSocketClient client; @Nullable
@Override
public IBinder onBind(Intent intent) {
Log.i(TAG, "onBind: ");
if (binder == null){
binder = new MyWebSocketService.ServiceBinder();
}
return binder;
}
public class ServiceBinder extends Binder {
public MyWebSocketService getService() {
return MyWebSocketService.this;
}
} @Override
public void onCreate() {
super.onCreate();
Log.i(TAG, "onCreate: ");
// 连接
webSocketThread = new MyWebSocketService.WebSocketThread();
webSocketThread.start(); }
private class WebSocketThread extends Thread {
@Override
public void run() {
Log.i(TAG, "run: ");
setupWebSocket();
}
} protected void setupWebSocket(){
Log.i(TAG, "setupWebSocket: ");
if (connectStatus != 0) return;
connectStatus = 1;
try {
client = new WebSocketClient(URI.create(getConnectUrl()), new Draft_10()) {
@Override
public void onOpen(ServerHandshake handshakedata) {
connectStatus = 2;
} @Override
public void onMessage(String message) {
Log.i(TAG, "onMessage: " + message);
// 消息分发
dispatchResponse(message);
} @Override
public void onClose(int code, String reason, boolean remote) {
Log.e(TAG, "onClose: " + code + reason);
connectStatus = 0;
// EventBus 通知 } @Override
public void onError(Exception ex) {
Log.e(TAG, "onError: " + ex.getMessage());
connectStatus = 0;
// EventBus 通知
} };
client.connect();
}catch (Exception e){
e.printStackTrace();
} } @Override
public void onDestroy() {
super.onDestroy();
Log.i(TAG, "onDestroy: ");
} @Override
public void sendText(String text) {
Log.i(TAG, "sendText From Four Activity : " + text);
if (TextUtils.isEmpty(text)) return;
if (client != null && connectStatus == 2){
client.send(text);
}
} @Override
public int getConnectStatus() {
return connectStatus;
} @Override
public void reconnect() {
Log.i(TAG, "reconnect: ");
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (webSocketThread != null && webSocketThread.isAlive()){
connectStatus = 0;
webSocketThread = new WebSocketThread();
webSocketThread.start();
}else {
Log.e(TAG, "run: reconnect action is Failed " );
}
}
}).start();
} @Override
public void stop() {
Log.i(TAG, "stop: ");
client.close();
connectStatus = 0;
} /**
* 获取服务器地址
* @return
*/
protected abstract String getConnectUrl(); /**
* 分发响应数据
*/
protected abstract void dispatchResponse(String textResponse); }
同借鉴文章中 AbsBaseWebSocketService.java 文件
其主要功能是:
实现websocket 连接过程中几个行为:IWebSocket,
提供具体的服务绑定,
开启websocket 连接线程,回调消息处理等
其他代码不多加赘述,请先看借鉴文章,之后便对此一目了然,如有不懂,可在下方评论区留言,
谢谢!
安卓websocket 封装基于Java-websocket的更多相关文章
- 基于Java的WebSocket推送
WebSocket的主动推送 关于消息推送,现在的解决方案如轮询.长连接或者短连接,当然还有其他的一些技术框架,有的是客户端直接去服务端拿数据. 其实推送推送主要讲的是一个推的概念,WebSocket ...
- 基于java webRct webSocket 实现点对点视频 (需要源码的请加支付宝好友)
打开支付宝首页搜“555176706”领红包,即可加好友 <%@ page language="java" pageEncoding="UTF-8"%&g ...
- 基于Java API for WebSocket (JSR-356)的标准websocket客户端
maven依赖 springboot <dependency> <groupId>org.springframework.boot</groupId> <ar ...
- Java WebSocket实现网络聊天室(群聊+私聊)
1.简单说明 在网上看到一份比较nice的基于webSocket网页聊天项目,准备看看学习学习,如是有了这篇文章!原博主博客:http://blog.csdn.net/Amayadream/artic ...
- java websocket学习
引言: websocket,webservice傻傻分不清楚,都觉得是很高深的东西,理解中的webservice是一种协议,通信协议,类似http协议的那种,比如使用webservice协议调后台接口 ...
- Java WebSocket 线程安全的保证
Java WebSocket线程安全基于3点: 1 在新的客户端连接时,WebSocket容器会创建一个新的端点实例,对应的会话实例表示从唯一的客户端到该端点实例的唯一连接. 2 每个WebSocke ...
- JAVA WebSocKet ( 实现简单的前后端即时通信 )
1, 前端代码 HTML5 部分 <!DOCTYPE html> <html> <head> <meta charset="utf-8"& ...
- SpringBoot集成WebSocket【基于纯H5】进行点对点[一对一]和广播[一对多]实时推送
代码全部复制,仅供自己学习用 1.环境搭建 因为在上一篇基于STOMP协议实现的WebSocket里已经有大概介绍过Web的基本情况了,所以在这篇就不多说了,我们直接进入正题吧,在SpringBoot ...
- java websocket 简单使用【案例】
现很多网站为了实现即时通讯,所用的技术都是轮询(polling).轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发 出HTTP request,然后由服务器返回最新的数据给客服端的浏览器.这种 ...
随机推荐
- 如何为Windows XP / Windows7-32bit / Windows7-64bit安装capicom.dll
原文: http://164.100.181.16/ssdgsap/RegisterDLL.htm 1.根据操作系统的要求下载相应的文件夹安装capicom.dll for Windows XP的步骤 ...
- [02-02 ]Java数据库链接范列
/* 01 连接池版本的 数据库 连接管理工具,适合于并发场合 */ package cn.tedu.jdbc.day02; import java.io.InputStream; import ja ...
- ASO的效果应该如何去评判,有什么标准可以量化指标
ASO的效果应该如何去评判,有什么标准可以量化指标 以往我们主要会教大家怎么做 ASO 优化,优化中有什么技巧……在掌握ASO优化技巧之后,从执行层面来考虑,就该选择流量平台了. 目前市场上的流量平台 ...
- springboot+rediscluster
@EnableCaching @Configuration public class RedisConfiguration extends CachingConfigurerSupport { @Au ...
- How to disable transparent hugepages (THP) on Red Hat Enterprise Linux 7
How to disable transparent hugepages (THP) on Red Hat Enterprise Linux 7 $ Solution 已验证 - 已更新2017年六月 ...
- LeetCode 122 Best Time to Buy and Sell Stock II 解题报告
题目要求 Say you have an array for which the ith element is the price of a given stock on day i. Design ...
- python 去掉重复元素 学到再添加
1. python 内置函数 set(可迭代对象) 返回无重复元素的集合.如在分类中,classification为类别数组 set(classification)为类别数 2.numpy np.un ...
- php 数据库乱码。。。php 移动临时文件
数据库乱码,三个位置 处理好不会乱码 第一前台,传到后台: 第二后台,传到数据库: 第三数据库,存入数据库: 详解 https://www.cnblogs.com/zhoujinyi/p/46188 ...
- mysql统计库下所有表数据行数
一.执行下面sql select concat( 'select "', TABLE_name, '", count(*) from ', TABLE_SCHEMA, '.', T ...
- 大疆2019校招FPGA笔试总结
1.对于同步fifo,每100个cycle可以写入80个数据,每10个cycle可以读出8个数据,fifo的深度至少为? 写时钟频率 w_clk, 读时钟频率 r_clk, 写时钟周期里,每B个时钟周 ...