gpt4 book ai didi

android - 使用 OkHttp 检查套接字是否连接或断开连接的更好方法?

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:47:52 34 4
gpt4 key购买 nike

我在 Android 上使用 OkHttp 通过套接字发送和接收消息。

创建套接字连接-

SocketListener listener = new SocketListener();

mOkHttpClient = new OkHttpClient.Builder()
.readTimeout(0, TimeUnit.MILLISECONDS)
.build();
Request request = new Request.Builder()
.url(socketURL)
.build();
mOkHttpClient.newWebSocket(request, listener);

这是用于监听所有网络套接字事件的 SocketListener 类 -

public final class SocketListener extends WebSocketListener { 
@Override
public void onOpen(WebSocket webSocket, Response response) {
// doing something
isSocketConnected = true;
}

@Override
public void onMessage(WebSocket webSocket, String text) {
// doing something
}

@Override
public void onMessage(WebSocket webSocket, ByteString bytes) {
}

@Override
public void onClosing(WebSocket webSocket, int code, String reason) {
// doing something
isSocketConnected = true;
}

@Override
public void onFailure(WebSocket webSocket, Throwable t, Response response) {
isSocketConnected = false;
}

}

有时套接字连接断开,如您所见,我在 SocketListener 类上使用 isSocketConnected 变量来跟踪“套接字是连接还是断开”。

有没有更好的方法来检查套接字是连接还是断开?

最佳答案

这是Tinder Scarlet使用Rx解决的方法

internal class OkHttpWebSocketEventObserver : WebSocketListener() {
private val processor = PublishProcessor.create<WebSocket.Event>().toSerialized()

fun observe(): Flowable<WebSocket.Event> = processor

fun terminate() = processor.onComplete()

override fun onOpen(webSocket: okhttp3.WebSocket, response: Response) =
processor.onNext(WebSocket.Event.OnConnectionOpened(webSocket))

override fun onMessage(webSocket: okhttp3.WebSocket, bytes: ByteString) =
processor.onNext(WebSocket.Event.OnMessageReceived(Message.Bytes(bytes.toByteArray())))

override fun onMessage(webSocket: okhttp3.WebSocket, text: String) =
processor.onNext(WebSocket.Event.OnMessageReceived(Message.Text(text)))

override fun onClosing(webSocket: okhttp3.WebSocket, code: Int, reason: String) =
processor.onNext(WebSocket.Event.OnConnectionClosing(ShutdownReason(code, reason)))

override fun onClosed(webSocket: okhttp3.WebSocket, code: Int, reason: String) =
processor.onNext(WebSocket.Event.OnConnectionClosed(ShutdownReason(code, reason)))

override fun onFailure(webSocket: okhttp3.WebSocket, t: Throwable, response: Response?) =
processor.onNext(WebSocket.Event.OnConnectionFailed(t))
}

关于android - 使用 OkHttp 检查套接字是否连接或断开连接的更好方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49049022/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com