鍍金池/ 問(wèn)答/HTML/ weex_devtools中的WeexInspector問(wèn)題

weex_devtools中的WeexInspector問(wèn)題

WeexInspector中引入最新的0.13.4包后,按照官方教程添加了CustomWebSocketClient來(lái)適配高版本的okhttp,但是在調(diào)試應(yīng)用過(guò)程中出現(xiàn)了readtimeout的錯(cuò)誤,導(dǎo)致socket連接失敗,請(qǐng)問(wèn)有誰(shuí)知道解決辦法嗎?

public class CustomWebSocketClient implements IWebSocketClient {

    private WebSocket ws;

    @Override
    public boolean isOpen() {
        return ws != null;
    }

    @Override
    public void connect(String wsAddress, final WSListener listener) {
        OkHttpClient okHttpClient = new OkHttpClient();
        okHttpClient.setConnectTimeout(30, TimeUnit.SECONDS);
        okHttpClient.setReadTimeout(5, TimeUnit.SECONDS);
        okHttpClient.setWriteTimeout(30, TimeUnit.SECONDS);

        Request request = new Request.Builder().url(wsAddress).build();
        WebSocketCall webSocketCall = WebSocketCall.create(okHttpClient, request);
        webSocketCall.enqueue(new WebSocketListener() {
            @Override
            public void onOpen(WebSocket webSocket, Request request, Response response) throws IOException {
                ws = webSocket;
                listener.onOpen();
            }

            @Override
            public void onMessage(BufferedSource payload, WebSocket.PayloadType type) throws IOException {
               if (WebSocket.PayloadType.TEXT == type) {
                   listener.onMessage(payload.readUtf8());
                   //文檔中沒(méi)有這句代碼,但是應(yīng)該是要加上,否則報(bào)錯(cuò)
                   payload.close();
               }
            }

            @Override
            public void onPong(Buffer payload) {
                //ignore
            }

            @Override
            public void onClose(int code, String reason) {
                listener.onClose();
            }

            @Override
            public void onFailure(IOException e) {
                listener.onFailure(e);
            }
        });
    }

    @Override
    public void close() {
        if (ws != null) {
            try {
                ws.close(CloseCodes.NORMAL_CLOSURE, "Normal closure");
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    @Override
    public void sendMessage(int requestId, String message) {
        if (ws != null) {
            try {
                ws.sendMessage(WebSocket.PayloadType.TEXT, new Buffer().writeString(message, Charset.defaultCharset()));
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
回答
編輯回答
落殤

應(yīng)該是你代碼編寫(xiě)的問(wèn)題。

話(huà)說(shuō)你在哪里看到的你說(shuō)的那篇教程?

2017年5月27日 20:03
編輯回答
尋仙

我也遇到了,我是在chrome上進(jìn)行調(diào)試,只要打開(kāi)NetWork開(kāi)關(guān),app就會(huì)報(bào)錯(cuò): java.lang.NoClassDefFoundError: Failed resolution of: Lcom/taobao/weex/devtools/inspector/network/NetworkEventReporterImpl , 翻了源碼里面是有這個(gè)類(lèi)的,但是這個(gè)類(lèi)實(shí)現(xiàn)了一個(gè)接口NetworkEventReporter卻沒(méi)有,整個(gè)weex-inspector包里面都沒(méi)有,這是怎么回事?

2018年9月15日 17:09
編輯回答
朕略萌

問(wèn)題解決了:
1.官方的代碼有問(wèn)題,在onMessage里需要加一句payload.close()
2.參照官方的okhttpClient實(shí)現(xiàn),我將readTimeout設(shè)置為0,剩下的都設(shè)置為30s

2018年6月2日 13:18