安卓websocket长连接

简介

WebSocket协议是一种建立在TCP连接基础上的全双工通信的协议。
全双工就是指客户端和服务端可以同时进行双向通信,强调同时、双向通信.
关于WebSocket协议,一般来说,如果是通过https协议开始升级而来的,那么一般是wss://开头,如果是http协议开始升级而来的,那么一般是ws://开头

在安卓上,一般有两种方式去实现websocket
okhttp以及Java-WebSocket
https://github.com/TooTallNate/Java-WebSocket

Java-WebSocket使用

首先添加引用

    compile "org.java-websocket:Java-WebSocket:1.3.4"

代码调用

  Draft_6455 draft_17 = new Draft_6455();
        URI uri = URI.create("ws://xxx.com");
        WebSocketClient webSocketClient = new WebSocketClient(uri, draft_17) {
            @Override
            public void onOpen(ServerHandshake handshakedata) {
                Log.d(TAG, "run() returned: " + "连接到服务器");
            }

            @Override
            public void onMessage(String message) {
                Log.d(TAG, "run() returned: " + message);
            }

            @Override
            public void onClose(int code, String reason, boolean remote) {
//                tv_title.setText("未连接");
                Log.d(TAG, "onClose() returned: " + reason);
            }

            @Override
            public void onError(Exception ex) {
                Log.d(TAG, "onError() returned: " + ex);
//                tv_title.setText("连接异常");
            }
        };
        webSocketClient.connect();

注意,连接中使用的new Draft_17()就是使用的协议version 17(RFC 6455),Tomcat 7.0使用的协议版本为RFC 6455。

总结websocket的利弊

优点:
与socket相比,可以节省额外的端口占用,直接使用一个公网域名访问。

另外协议对报文的流量消耗做了优化。

缺点:
毕竟websocket底层也是socket连接,因而当大并发用户连接时目测会消耗较多资源。

另外在一些情况下(比如网络异常)websocket端开连接但并没有走到error回调中,如果配合心跳包发送会更好

猜你喜欢

转载自blog.csdn.net/jin870132/article/details/73865480