安卓websocket 封装基于Java-websocket

摘要:
本文从https://blog.csdn.net/u013872857/article/details/79190643感谢上帝的贡献。本文中使用的websocket是:nv-websocket-client:2.2,而Java websocket:1.3.0核心代码如下:publicabstractclassMyWebSocketServiceextendsServicei

本文借鉴于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》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇C语言Windows程序开发—Windows窗口样式与常用控件样式【第04天】Linux下的shell与make下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

php websocket-网页实时聊天之PHP实现websocket(ajax长轮询和websocket都可以时间网络聊天室)

php websocket-网页实时聊天之PHP实现websocket(ajax长轮询和websocket都可以时间网络聊天室) 一、总结 1、ajax长轮询和websocket都可以时间网络聊天室 2、websocket:websocket是html5的新特性,是一种和http一个层次的协议 3、PHP 实现 websocket:PHP 实现 webso...

基于动态代理的WebAPI/RPC/webSocket框架,一套接口定义,多个通讯方式

API/RPC/webSocket三个看起来好像没啥相同的地方,在开发时,服务端,客户端实现代码也大不一样 最近整理了一下,通过动态代理的形式,整合了这些开发,都通过统一的接口约束,服务端实现和客户端调用 基于这样的形式,WebAPI/RPC/webSocket只需要定义一套接口,就能达到通用的效果  示例接口约束 public class Tes...

win10 Jmeter5.1进行websocet压力测试笔记 服务端 net core2.2

1. win10安装jmeter5.1 参考文件 https://blog.csdn.net/Jenny_He/article/details/88926605 2. JMeter 扩展实现 WebSocket 支持 JMeter 是目前最为流行的开源性能测试工具,JMeter 本身提供的基于插件的机制允许第三方实现标准 JMeter 所不支持的协议,而...

使用C++ 实现的 websocket 客户端 (基于easywsclient)

直接上代码 easywsclient.hpp #ifndef EASYWSCLIENT_HPP_20120819_MIOFVASDTNUASZDQPLFD #define EASYWSCLIENT_HPP_20120819_MIOFVASDTNUASZDQPLFD // This code comes from: // https://github.co...

WebSocket协议 8 问

WebSocket是一种比较新的协议,它是伴随着html5规范而生的,虽然还比较年轻,但大多主流浏览器都已经支持。它使用方面、应用广泛,已经渗透到前后端开发的各种场景中。 对http一问一答中二式流程的不满,催生了支持双向通信的WebSocket诞生。WebSocket是个不太干净协议。 一、WebSocket协议只能浏览器发起么? 不是。目前此协议的受...

python+mitmproxy抓包过滤+redis消息订阅+websocket实时消息发送,日志实时输出到web界面

本实例实现需求 在游戏SDK测试中,经常需要测试游戏中SDK的埋点日志是否接入正确。本实例通过抓包(客户端http/https 请求)来判定埋点日志是是否接入正确。 实现细节:使用django项目,后端采用python mitmdump 扩展脚本“log_handler.py”实时抓取与过滤4399SDK 客户端日志,将数据处理成约定需要的格式,保存和发布...