okhttp中newWebSocket使用

1、定义变量
  private WebSocket zhiboSocket = null;//socket对象
  private boolean isOpen = false;//是否连接成功
2、使用单例
private static  ZhiboSocketClient zhiboSocketClient = new ZhiboSocketClient();
private  ZhiboSocketClient (){}
private   ZhiboSocketClient  getInstance(){
    return  zhiboSocketClient ;
}
3、建立连接
private void connectsocket() {
        OkHttpClient okHttpClient = new OkHttpClient.Builder()
                .connectTimeout(20, TimeUnit.SECONDS)
                .callTimeout(5, TimeUnit.SECONDS)
                .pingInterval(10, TimeUnit.SECONDS)//发送心跳保活用的 不需要自己额外发送
                .readTimeout(BaseConfig.CONNECT_TIME_OUT, BaseConfig.TIME_TYPE)
                .build();
        Request request = new Request
                .Builder()
                .url(BaseConfig.zbWsUrl)
                .build();
        zhiboSocket = okHttpClient.newWebSocket(request, new WebSocketListener() {
            @Override
            public void onClosed(@NotNull WebSocket webSocket, int code, @NotNull String reason) {
                isOpen = false;
                EventBus.getDefault().post(new ZhiboWsEvent(ZhiboStatus.WSFAILURE));
            }

            @Override
            public void onClosing(@NotNull WebSocket webSocket, int code, @NotNull String reason) {
                isOpen = false;
                EventBus.getDefault().post(new ZhiboWsEvent(ZhiboStatus.WSCLOSE));
            }

            @Override
            public void onFailure(@NotNull WebSocket webSocket, @NotNull Throwable t, @Nullable Response response) {
                isOpen = false;
                EventBus.getDefault().post(new ZhiboWsEvent(ZhiboStatus.WSFAILURE));
            }

            @Override
            public void onMessage(@NotNull WebSocket webSocket, @NotNull String text) {
                isOpen = true;
                if(!text.isEmpty()){
                    ZbWsMsgVo<Map<String,Object>> json = JSON.parseObject(text,new TypeReference<ZbWsMsgVo<Map<String,Object>>>(){});
                    EventBus.getDefault().post(json);
                }
            }

            @Override
            public void onMessage(@NotNull WebSocket webSocket, @NotNull ByteString bytes) {
                isOpen = true;
            }

            @Override
            public void onOpen(@NotNull WebSocket webSocket, @NotNull Response response) {
                isOpen = true;
                EventBus.getDefault().post(new ZhiboWsEvent(ZhiboStatus.WSOPEN));
            }
        });
    }
4、断线重连
private  void closeAndReConnect(){
        try {
            if(!isOpen){
                zhiboSocket.cancel();
                zhiboSocket = null;
                connectsocket();
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }
5、是否已经建立连接
public  boolean socketIsOpen(){
        return zhiboSocket!=null&&isOpen;
    }
6、关闭socket服务
public void finish() {
        try {
            if(zhiboSocket!=null){
                zhiboSocket.cancel();
                zhiboSocket = null;
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容