安卓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,然后由服务器返回最新的数据给客服端的浏览器.这种 ...
随机推荐
- ORACLE中通过SQL语句(alter table)来增加、删除、修改字段
1.添加字段: alter table 表名 add (字段 字段类型) [ default '输入默认值'] [null/not null] ; 2.添加备注: comment on ...
- BringWindowToTop完美激活窗口与置顶
void ActiveWin(IntPtr h) { IntPtr hForeWnd = GetForegroundWindow();//获取当前窗口句柄 int tIdCur = GetWindow ...
- EF Core 相关的千倍性能之差: AutoMapper ProjectTo VS Mapster ProjectToType
在前两天遇到 .NET Core 中 EF Core 的异步与同步查询的百倍性能之差(详情之前的博文)之后,这两天又遇到了 AutoMapper ProjectTo<T> 与 Mapste ...
- php删除文件夹
function deldir($dir) { $dh=opendir($dir); while ($file=readdir($dh)) { if($file!="." & ...
- [ipsec][crypto] IKEv2的协商交互分析
一: 无论协商了什么样的加密算法.DH都交换一块长度为32byte的内存,作为key. IKE和esp的key,分别基于这块内存生成. 二: 当esp的算法协商没有指定dh group时,rekey将 ...
- [emacs] emacs设置python code的indent
装python-mode的包 https://gitlab.com/python-mode-devs/python-mode/tree/master python-mode emacswiki文档 e ...
- qss qt按钮自定义
- linux基础命令--userdel 删除用户帐户和相关文件
描述 userdel命令用于删除用户帐户和相关文件. userdel命令修改系统账户文件,删除所有涉及用户的信息,指定的用户(LOGIN)必须存在. 语法 userdel [options] LOGI ...
- centos下etcd集群安装
先仔细了解学习etcd 官方: https://github.com/etcd-io/etcd https://www.cnblogs.com/softidea/p/6517959.html http ...
- new Date() 日期格式处理
var myDate = new Date(); myDate.getYear(); //获取当前年份(2位) myDate.getFullYear(); //获取完整的年份(4位,1970-???? ...