安卓java websocket包_安卓websocket 封装基于Java-websocket

本文介绍了一个基于Java-WebSocket库在安卓服务中封装WebSocket服务的实现,包括连接、消息处理、状态管理和重新连接策略。示例代码展示了如何创建WebSocketClient,处理onOpen、onMessage、onClose和onError事件,并提供了发送文本消息的方法。
摘要由CSDN通过智能技术生成

借鉴文章所用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 连接线程,回调消息处理等

其他代码不多加赘述,请先看借鉴文章,之后便对此一目了然,如有不懂,可在下方评论区留言,

谢谢!

基于Java的WebSocket推送

WebSocket的主动推送 关于消息推送,现在的解决方案如轮询.长连接或者短连接,当然还有其他的一些技术框架,有的是客户端直接去服务端拿数据. 其实推送推送主要讲的是一个推的概念,WebSocket ...

基于java webRct webSocket 实现点对点视频 (需要源码的请加支付宝好友)

打开支付宝首页搜“555176706”领红包,即可加好友

基于Java API for WebSocket (JSR-356)的标准websocket客户端

maven依赖 springboot org.springframework.boot

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 部分

SpringBoot集成WebSocket【基于纯H5】进行点对点[一对一]和广播[一对多]实时推送

代码全部复制,仅供自己学习用 1.环境搭建 因为在上一篇基于STOMP协议实现的WebSocket里已经有大概介绍过Web的基本情况了,所以在这篇就不多说了,我们直接进入正题吧,在SpringBoot ...

java websocket 简单使用【案例】

现很多网站为了实现即时通讯,所用的技术都是轮询(polling).轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发 出HTTP request,然后由服务器返回最新的数据给客服端的浏览器.这种 ...

随机推荐

【JavaScript】JS跨域设置和取Cookie

cookie 是存储于访问者的计算机中的变量.每当同一台计算机通过浏览器请求某个页面时,就会发送这个 cookie.你可以使用 JavaScript 来创建和取回 cookie 的值.本文主要JS怎样 ...

python基础学习篇章一

一. 对Python的认识 1. Python的标准实现方式是将源代码的语句编译为字节码的形式,之后再将字节码解释出来.由于字节码是一种与平台无关的形式,字节码具有可移植性.但是Python没有将代码 ...

对于Javascript 执行上下文的理解

转载无源头地址 在这篇文章中,将比较深入地阐述下执行上下文 – JavaScript中最基础也是最重要的一个概念.相信读完这篇文章后,你就会明白javascript引擎内部在执行代码以前到底做了些什么 ...

基于opencv图片切割

基于opencv图片切割为n个3*3区块 工作原因,切割图片,任务急,暂留调通的源码,留以后用. package com.rosetta.image.test; import org.opencv.c ...

Unity3D Shader基础教程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值