Ktor WebSockets:kotlinx.serialization.SerializationException:找不到类“DefaultClientWebSocketSession”的序列化

Posted

技术标签:

【中文标题】Ktor WebSockets:kotlinx.serialization.SerializationException:找不到类“DefaultClientWebSocketSession”的序列化程序【英文标题】:Ktor WebSockets: kotlinx.serialization.SerializationException: Serializer for class 'DefaultClientWebSocketSession' is not found 【发布时间】:2021-10-07 18:53:33 【问题描述】:

今天我正在制作一个实时应用程序,我想使用 WebSockets 来更新我的状态。

在我得到这个异常之前一切都很好:

kotlinx.serialization.SerializationException: Serializer for class 'DefaultClientWebSocketSession' is not found.
Mark the class as @Serializable or provide the serializer explicitly.

我找了又找,什么都没找到。

所以我的代码看起来与此类似:

Gradle 导入:

implementation("io.ktor:ktor-client-core:1.6.2")
implementation("io.ktor:ktor-client-cio:1.6.2")
implementation("io.ktor:ktor-client-serialization:1.6.2")
implementation("io.ktor:ktor-client-websockets:1.6.2")

代码:

suspend fun main() 
    val endpoint = Url("http://localhost:8080")
    val client = HttpClient(CIO) 
        install(JsonFeature) 
            serializer = KotlinxSerializer()
        
        install(WebSockets)
    
    client.webSocket(
        url 
            takeFrom(endpoint)
            path("beeam")
        
    ) 
        //Do something
    

我希望有人可以帮助我。

【问题讨论】:

能否尝试将端点 URL 中的 http 协议替换为 ws?另外,请分享服务器的设置。 感谢您的帮助!问题在于方案。但是执行文本实际上与该方案无关。 【参考方案1】:

问题

问题在于 endpoint.protocolURLProtocol.HTTP 而不是 URLProtocol.WS 并且使用 takeFrom 您还可以转移此属性。

解决方案

suspend fun main() 
    val endpoint = Url("http://localhost:8080")
    val client = HttpClient(CIO) 
        install(JsonFeature) 
            serializer = KotlinxSerializer()
        
        install(WebSockets)
    
    client.webSocket(
        url 
            takeFrom(endpoint)
            path("beeam")
            protocol = URLProtocol.WS
        
    ) 
        //Do something
    

【讨论】:

以上是关于Ktor WebSockets:kotlinx.serialization.SerializationException:找不到类“DefaultClientWebSocketSession”的序列化的主要内容,如果未能解决你的问题,请参考以下文章

Ktor WebSockets:kotlinx.serialization.SerializationException:找不到类“DefaultClientWebSocketSession”的序列化

尝试在客户端接收数据时,Ktor-websocket 库不执行任何操作

将自定义标头设置为 websocket 请求 (ktor)

ktor websocket flow api是如何工作的?

Ktor 启动示例错误

KTor 站点无法访问