簡體   English   中英

為什么OkHttp會默默地取代ws://或wss:// scheme?

[英]Why does OkHttp silently replace ws:// or wss:// schemes?

我一直試圖在Android上使用帶有wss:// URL的OkHttp WebSockets無濟於事。 當我使用wss:// scheme傳遞一個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:方案。 但這可能不是您的Web套接字失敗的原因。 方案更改旨在作為OkHttp內部的實現細節,不應影響行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM