zoukankan      html  css  js  c++  java
  • Android WebSocket实现即时通讯功能

    Java-WebSocket框架

    GitHub地址:https://github.com/TooTallNate/Java-WebSocket

    目前已经有五千以上star,并且还在更新维护中,所以本文将介绍如何利用此开源库实现一个稳定的即时通讯功能

    一、引入Java-WebSocket

    1、build.gradle中加入

    implementation "org.java-websocket:Java-WebSocket:1.4.0" 

    2、加入网络请求权限

    <uses-permission android:name="android.permission.INTERNET" />
    

    3、新建客户端类
    新建一个客户端类并继承WebSocketClient,需要实现它的四个抽象方法和构造函数,如下:

    public class JWebSocketClient extends WebSocketClient {
        public JWebSocketClient(URI serverUri) {
            super(serverUri, new Draft_6455());
        }
    
        @Override
        public void onOpen(ServerHandshake handshakedata) {
            Log.e("JWebSocketClient", "onOpen()");
        }
    
        @Override
        public void onMessage(String message) {
            Log.e("JWebSocketClient", "onMessage()");
        }
    
        @Override
        public void onClose(int code, String reason, boolean remote) {
            Log.e("JWebSocketClient", "onClose()");
        }
    
        @Override
        public void onError(Exception ex) {
            Log.e("JWebSocketClient", "onError()");
        }
    }
    

     

    其中onOpen()方法在websocket连接开启时调用,onMessage()方法在接收到消息时调用,onClose()方法在连接断开时调用,onError()方法在连接出错时调用。构造方法中的new Draft_6455()代表使用的协议版本,这里可以不写或者写成这样即可。

    4、建立websocket连接
    建立连接只需要初始化此客户端再调用连接方法,需要注意的是WebSocketClient对象是不能重复使用的,所以不能重复初始化,其他地方只能调用当前这个Client。

    URI uri = URI.create("ws://*******");
    JWebSocketClient client = new JWebSocketClient(uri) {
        @Override
        public void onMessage(String message) {
            //message就是接收到的消息
            Log.e("JWebSClientService", message);
        }
    };

     

    为了方便对接收到的消息进行处理,可以在这重写onMessage()方法。初始化客户端时需要传入websocket地址(测试地址:ws://echo.websocket.org),websocket协议地址大致是这样的
    ws:// ip地址 : 端口号
    

     连接时可以使用connect()方法或connectBlocking()方法,建议使用connectBlocking()方法,connectBlocking多出一个等待操作,会先连接再发送

    try {
        client.connectBlocking();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    

    运行之后可以看到客户端的onOpen()方法得到了执行,表示已经和websocket建立了连接

    5、发送消息
    发送消息只需要调用send()方法,如下
    if (client != null && client.isOpen()) {
        client.send("你好");
    }
    

     6、关闭socket连接
    关闭连接调用close()方法,最后为了避免重复实例化WebSocketClient对象,关闭时一定要将对象置空。 

    /**
     * 断开连接
     */
    private void closeConnect() {
        try {
            if (null != client) {
                client.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            client = null;
        }
    }
    

      

    参考于:https://www.jianshu.com/p/7b919910c892

  • 相关阅读:
    excel生成数据地图
    利用web of science做论文综述
    机器学习算法一览图
    什么是机器学习?
    机器学习十大算法(二)
    机器学习十大算法(一)
    django传值出现二进制乱码(基于python3)
    解决mysql的动态添加字段以及数据的方法(基于python3.6)
    odoo权限控制
    win32service的解决办法(pywin32)
  • 原文地址:https://www.cnblogs.com/changyiqiang/p/12161601.html
Copyright © 2011-2022 走看看