为什么OkHttp静默地替换ws://或wss://方案



我一直试图在Android上使用带有wss://URL的OkHttp WebSockets,但没有成功。当我用wss://方案传递URL时,它会被https://替换。然后,它当然会失败。

有人对如何进行有什么建议吗。有更好的websocket库吗?这是我正在做的服务。

class WebsocketService(private val okHttpClient: OkHttpClient) : 
WebSocketListener() {
private lateinit var webSocket: WebSocket
private lateinit var serverListener: ServerListener
fun connect(listener: ServerListener) {
this.serverListener = listener

val request = Request.Builder().url(SOCKET_URL).build()
okHttpClient.newWebSocket(request, this)
}
override fun onOpen(webSocket: WebSocket?, response: Response?) {
super.onOpen(webSocket, response)
Timber.e("On Open %s", response.toString())
}
override fun onFailure(webSocket: WebSocket?, t: Throwable?, response: Response?) {
super.onFailure(webSocket, t, response)
Timber.e("On Failure %s", response.toString())
}
override fun onClosing(webSocket: WebSocket?, code: Int, reason: String?) {
super.onClosing(webSocket, code, reason)
Timber.e("On Closing %s", reason)
}
override fun onMessage(webSocket: WebSocket?, text: String?) {
super.onMessage(webSocket, text)
Timber.e("On Message %s", text)
}
override fun onMessage(webSocket: WebSocket?, bytes: ByteString?) {
super.onMessage(webSocket, bytes)
Timber.e("On Message Bytes %s", bytes)
}
override fun onClosed(webSocket: WebSocket?, code: Int, reason: String?) {
super.onClosed(webSocket, code, reason)
Timber.e("On Closed %s", reason)
}

enum class ConnectionStatus {
DISCONNECTED,
CONNECTED
}
interface ServerListener {
fun onNewMessage(message: String)
fun onStatusChange(status: ConnectionStatus)
}
}

OkHttp用于对URL进行建模的HttpUrl类仅对http:https:方案进行建模。但这不太可能是你的网络套接字失败的原因。方案更改旨在作为OkHttp内部的实现细节,不应影响行为。

最新更新