安卓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,然后由服务器返回最新的数据给客服端的浏览器.这种 ...
随机推荐
- Python学习之旅(三十七)
Python基础知识(36):访问数据库(Ⅰ) 程序运行的时候,数据都是在内存中的.当程序终止的时候,通常都需要将数据保存到磁盘上,无论是保存到本地磁盘,还是通过网络保存到服务器上,最终都会将数据写入 ...
- C# 换行
要让一个Windows Form的TextBox显示多行文本就得把它的Multiline属性设置为true. 要让TextBox里面的文本换行大家往往会想到直接在要换行的地方加个转义的换行符&quo ...
- JAVA RPC(一)RPC入门
为什么要写这个RPC 市面上常见的RPC框架很多,grpc,motan,dubbo等,但是随着越来越多的元素加入,复杂的架构设计等因素似使得这些框架就想spring一样,虽然号称是轻量级,但是用起来却 ...
- js对重复数组去重
var arr=[1,1,1,1,2,2,2,3,3,4,1,4,5,7,8,7,7] let m = {} arr.filter(item => m[item] >= 1 ? false ...
- spark-sql缩减版样例:获取每日top3搜索词和各自的次数,包括总次数
//获取出每天前3的搜索词 ArrayList<String> log = new ArrayList<String>(); log.add("2015-10-01, ...
- Elasticsearch学习笔记(九)partial update
一.什么是partial update? PUT /index/type/id,创建文档&替换文档,就是一样的语法 一般对应到应用程序中,每次的执行流程基本是这样的: (1)应用程序先发起一个 ...
- keras训练cnn模型时loss为nan
keras训练cnn模型时loss为nan 1.首先记下来如何解决这个问题的:由于我代码中 model.compile(loss='categorical_crossentropy', optimiz ...
- SpringBoot 2.x.x会拦截静态资源问题
之前在看尚硅谷视频时,可谓是按照这老师的说法,一步一步按部就班,于是采坑了,在SpringBoot 2.x.x之前是不会对静态资源拦截的,但是现在已经普通使用2.x.x这个版本会对静态资源进行拦截.看 ...
- MySQL数据库一般设计规则
一.数据库设计 规则一之存储规则: 一般情况可以选择MyISAM存储引擎,如果需要事务支持必须使用InnoDB存储引擎. 注意:MyISAM存储引擎 B-tree索引有一个很大的限制:参与一个索引的所 ...
- Delphi窗体显示Echarts图表
笨办法,先保存用着 unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Varian ...