android - 为什么 OkHttp 会默默地替换掉 ws ://or wss://schemes?

标签 android websocket okhttp

我一直在尝试在 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 内部的实现细节,不应影响行为。

关于android - 为什么 OkHttp 会默默地替换掉 ws ://or wss://schemes?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51303725/

相关文章:

java - 使用 Jetty Websocket 客户端设置 header

c++ - 如何使用cpprestsdk解析来自websocket_client的json数据

javascript - Sails.js websockets 在本地主机上工作但在我部署到 Openshift 后不工作

android - 如何在 Android Studio 中使用 retrofit2 获取 json 日志?

java - 创建菜单资源会抛出 IllegalStateException

java - 如何为 android recyclerview 网格布局设置边框。

具有基本身份验证的 Android OkHttp

android - 取消或覆盖在 Espresso 测试下的 Activity 中进行的 API 调用

java - 如何取消选中 Intellij IDEA 中的离线模式?

android - 窗口已经聚焦 - 忽略 com.android.internal.view 的聚焦增益