Android开发Android 文章Android开发经验谈

Android WebSocket即时通信

2020-05-29  本文已影响0人  奔跑吧李博
HTTP与WebSocket响应方式区别

WebSocket存在的理由

我们已经有了 HTTP 协议,为什么还需要另一个协议?因为只靠Http通信有一个缺陷:通信只能由客户端发起,HTTP 协议做不到服务器主动向客户端推送信息。这种单向请求的特点,注定了如果服务器有连续的状态变化,服务端想主动通知客户端,就难以实现。因此,工程师们一直在思考,有没有更好的方法,而 WebSocket 就是这样诞生的。

WebSocket其特点包括:

使用Java-WebSocket库进行简单通信

在经过对比之后,我选择了Java-WebSocket这个开源框架,毕竟star数量也是蛮高的,有质量保证。Java-WebSocket库github地址。

1.引入库

implementation "org.java-websocket:Java-WebSocket:1.5.1"
代码示例

2.创建WebSocketClient类

public class WSClient extends WebSocketClient {

    public WSClient(URI serverUri) {
        super(serverUri);
    }

    public WSClient(URI serverUri, Draft protocolDraft) {
        super(serverUri, protocolDraft);
    }

    @Override
    public void onOpen(ServerHandshake handshakedata) {

    }

    @Override
    public void onMessage(String message) {

    }

    @Override
    public void onClose(int code, String reason, boolean remote) {

    }

    @Override
    public void onError(Exception ex) {

    }
}
回调方法含义:
onOpen():连接成功回调,获取握手数据

onMessage():接收消息回调,获取接收数据

onClose():关闭连接回调,获取关闭信息

onError():连接异常回调,获取异常信息

3.与ws协议或wss协议地址通信,创建Uri,这里用例子ws://echo.websocket.org

URI uri = URI.create("ws://echo.websocket.org");

4.创建WSClient示例,通过onMessage()方法接收信息。

    WSClient wsClient = new WSClient(uri) {
        @Override
        public void onMessage(String message) {
            Log.e("info", "收到消息 " + message);
        }
    };

5.发送信息,可以发送String类型和byte[]类型

wsClient.send("传给你信息");

温馨提示:

在封装WebSocket使用时,需要注意心跳检测和重连,间隔时间后需要校验,如果中断需要重连;在适当的退出位置调用close()关闭连接;与服务端通信需要协定好传递的json对象;注意需要校验登录的地方。

上一篇下一篇

猜你喜欢

热点阅读