雨露均沾的OkHttp—WebSocket长连接(使用篇)

前言

最近老板又来新需求了,要做一个物联网相关的app,其中有个需求是客户端需要收发服务器不定期发出的消息。
内心OS:
🤔 这咋整呢?通过接口轮询?定时访问接口,有数据就更新?
🤔 不行不行,这样浪费资源了,还耗电,会导致很多请求都是无效的网络操作。
🤔 那就长连接呗?WebSocket协议好像不错,通过握手建立长连接后,可以随时收发服务器的消息。那就它了!
🤔 怎么集成呢?正好前段时间复习OkHttp源码的时候发现了它是支持Websocket协议的,那就用它试试吧!(戏好多,演不下去了🤮)

开淦!

WebSocket介绍

先简单介绍下WebSocket
我们都知道Http是处于应用层的一个通信协议,但是只支持单向主动通信,做不到服务器主动向客户端推送消息。而且Http是无状态的,即每次通信都没有关联性,导致跟服务器关系不紧密。

为了解决和服务器长时间通信的痛点呢,HTML5规范引出了WebSocket协议(知道这名字咋来的吧,人家HTML5规范引出的,随爸姓),是一种建立在TCP协议基础上的全双工通信的协议。他跟Http同属于应用层协议,下层还是需要通过TCP建立连接。

但是,WebSocketTCP连接建立后,还要通过Http进行一次握手,也就是通过Http发送一条GET请求消息给服务器,告诉服务器我要建立WebSocket连接了,你准备好哦,具体做法就是在头部信息中添加相关参数。然后服务器响应我知道了,并且将连接协议改成WebSocket,开始建立长连接。

这里贴上请求头和响应头信息,从网上找了一张图:

3851594110877_.pic.jpg

简单说明下参数:

  • URL一般是以ws或者wss开头,ws对应Websocket协议,wss对应在TLS之上的WebSocket。类似于HttpHttps的关系。
  • 请求方法为GET方法。
  • Connection:Upgrade,表示客户端要连接升级,不用Http协议。
  • Upgrade:websocket, 表示客户端要升级建立Websocket连接。
  • Sec-Websocket-Key:key, 这个key是随机生成的,服务器会通过这个参数验证该请求是否有效。
  • Sec-WebSocket-Version:13, websocket使用的协议,一般就是13。
  • Sec-webSocket-Extension:permessage-deflate,客户端指定的一些扩展协议,比如这里permessage-deflate就是WebSocket的一种压缩协议。
  • 响应码101,表示响应协议升级,后续的数据交互都按照Upgradet指定的WebSocket协议来。

OkHttp实现

添加OkHttp依赖
    implementation("com.squareup.okhttp3:okhttp:4.7.2")
实现代码

首先是初始化OkHttpClientWebSocket实例:

    /**
     * 初始化WebSocket
     */
    public void init() {
   
        mWbSocketUrl = "ws://jimu.test/websocket";
        mClient = new OkHttpClient.Builder()
                .pingInterval(10, TimeUnit.SECONDS)
                .build();
        Request request = new Request.Builder()
                .url(mWbSocketUrl)
                .build();
        mWebSocket = mClient.newWebSocket(request, new WsLi
  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值