安卓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,然后由服务器返回最新的数据给客服端的浏览器.这种 ...
随机推荐
- Pandora 生成 Token
生成 token 打数据到仓库 通过 api 签名工具实现 最后通过curl -XPOST -H "Content-Type: application/json" -H " ...
- jquery各版本
各版本下载: https://www.jb51.net/zt/jquerydown.htm
- java学习(四)--- String 、StringBuffer、StringBuilder 和 数组
对于 String.StringBuffer.StringBuilder比较一下 主要说说三者的不同 String 长度大小不可变 StringBuffer 和 StringBuilder 长度可变 ...
- 线段树合并+并查集 || BZOJ 2733: [HNOI2012]永无乡 || Luogu P3224 [HNOI2012]永无乡
题面:P3224 [HNOI2012]永无乡 题解: 随便写写 代码: #include<cstdio> #include<cstring> #include<iostr ...
- linux开通端口允许其他机器访问
命令开通8080端口允许其他机器对linux的访问: iptables -I INPUT -p tcp --dport 8080 -j ACCEPT
- Zookeeper运维问题集锦
实际工作中用到Zookeeper集群的地方很多, 也碰到过各种各样的问题, 在这里作个收集整理, 后续会一直补充; 其中很多问题的原因, 解决方案都是google而来, 这里只是作次搬运工; 其实很多 ...
- java-类、对象
1.类和对象: 类是抽象的,通常不能直接使用 对象是具体的,根据类来创建对象. 2.如何定义一个类:成员变量.成员方法 成员变量:直接定义在类中,在方法外面 成员方法:去掉static 关键字,其他和 ...
- abap 变量检查
1:sap logon中可以对变量命名进行检查 program>check>code inspector
- mac Robotframework执行时报错Robot Framework installation not found.
虽然已经装了,但一直报错 ,版本是3.1.1 最新版 ➜ ~ pip install robotframework DEPRECATION: Python 2.7 will reach the en ...
- 表情的战争(App名称)技术服务支持
1.进入游戏走过场动画,可以点击退出跳过此过场动画: 2.进入主界面后直接点击开始游戏进入场景跑图,进入npc对话面板,对话结束进入战斗面板: 3.战斗操作方法为玩家拖动表情牌,进行攻击或者防守,直至 ...