Android中Java-WebSocket简介

本文详细介绍使用Java-WebSocket实现长连接的方法,包括重连机制、心跳机制的自定义实现,以及如何处理后端传回的消息。通过具体代码示例,帮助读者理解并应用WebSocket在实际项目中的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近项目中用到长连接,使用的是Java-WebSocket,因此记录一下

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

到GitHub中查看最新的版本,然后引用, 因此这里就不讲如何引用了,只讲用法:

public class SocketService extends Service {
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    WebSocketClient client;

    @Override
    public void onCreate() {
        super.onCreate();

        try {
            client = new WebSocketClient(new URI("填入与后台连接的url")) {

                @Override
                public void onWebsocketPong(WebSocket conn, Framedata f) {
                    super.onWebsocketPong(conn, f);
//                    LogUtils.showLog(f.getPayloadData().toString());
//                    LogUtils.showLog("socket ping"+f.getOpcode());
                }

                @Override
                public void onOpen(ServerHandshake serverHandshake) {
                    // 连接打开以后的回调

                }


                @Override
                public void onMessage(String message) {
                    // 收到消息的回调
                    LogUtils.showLog("socket接收服务器发来的消息:" + message);
                }

                @Override
                public void onError(Exception ex) {
                    // 连接出错的回调
                }

                @Override
                public void onClose(int code, String reason, boolean remote) {
                    // 连接关闭的回调, remote如果为true表示被服务端cut掉了

                }

                @Override
                public void onMessage(ByteBuffer bytes) {
                    // 返回的字节流消息
                    LogUtils.showLog("socket bytebuffer bytes");
                }
            };

            client.connect();
        } catch (Exception e) {

        }
    }


    /**
     * 重连websocket
     * 此方法在handler中调用,由于重新连接websocket的线程如果与原先连接websocket的线程相同,会报异常,
     * 所以切换到HandlerThread的线程中重连
     */
    private void reConnectWebSocket() {
        if (null != client && !client.isOpen() && !isReConnecting) {
            //LogUtils.showLog("socket onStartConnect");
            client.reconnect();
        }
    }


    @Override
    public void onDestroy() {
        super.onDestroy();

        try {
            LogUtils.showLog("socket service onDestroy()");
            client.close();
        } catch (Exception e) {

        }
    }
}

1、重连机制需要自己来写:

(1)监听网络连接, 当从断开到连上就可以调用重连

(2)在client回调的onError和onClose中调用重连

2、心跳机制需要自己写

自己写一个循环的handler, 隔20秒就发送一个心跳:client.sendPing(), 这时候onWebsocketPong()会回调一次,这就是一次心跳

3、后端传回来的消息在onMessage中返回来, 我们可以跟后台定格式,哪些业务需要处理什么格式的数据,然后根据type来分发给业务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值