• 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

  • 相关阅读:
    Python 基础【第三篇】输入和输出
    把linux可执行程序做成一个服务[转]
    linux 下启动程序的时候会显示坏的解释器,或者没有那个文件
    利用GDB进行多线程调试
    两个结构体ifconf和ifreq
    centos系统修改网络配置注意事项
    yum错误:rpmdb: BDB0113 Thread/process 4227/139813012539200 failed: BDB1507 Thread died in Berkeley DB library
    CentOs安装MySql
    周末遐想(计算最长英语单词链)
    单词词频统计(12组)
  • 原文地址:https://www.cnblogs.com/changyiqiang/p/12161601.html
Copyright © 2020-2023  润新知