Ktor Websocket 功能与 ktor 中的 ContentNeogation 功能 (JSON / GSON)

Posted

技术标签:

【中文标题】Ktor Websocket 功能与 ktor 中的 ContentNeogation 功能 (JSON / GSON)【英文标题】:Ktor Websocket feature with ContentNeogation feature (JSON / GSON) in ktor 【发布时间】:2021-05-20 10:17:09 【问题描述】:

我正在尝试为 ktor 中的 Websocket 反序列化/序列化 JSON Payload。

目前我正在做类似的事情

// Global property
lateinit var globalGson: Gson

// fun Application.module()
install(ContentNegotiation) 
    gson 
        setDateFormat(DateFormat.LONG)
        setPrettyPrinting()
        globalGson = create() // init global property
    

在处理 websocket 时:

session.incoming.consumeEach  frame ->
            if (frame is Frame.Text)
              globalGson.fromJson(frame.readText(), MyClass::class.java) // use global property

是否有推荐的方式将 Websocket 功能与 GSON 功能结合使用?

是否有任何优雅的方法可以访问特定类型的已注册 ContentNeogation 并在没有 ApplicationPipeline 的情况下使用它? (我相信 WebSocketSession 没有)

【问题讨论】:

【参考方案1】:

不幸的是,无法将ContentNegotiationWebsockets 一起使用来序列化/反序列化帧数据。最好的办法是直接使用gson 库或任何其他此类库。

【讨论】:

以上是关于Ktor Websocket 功能与 ktor 中的 ContentNeogation 功能 (JSON / GSON)的主要内容,如果未能解决你的问题,请参考以下文章

如何保持 Kotlin Ktor websocket 处于打开状态

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

Android设备上的ktor websocket安装错误

使用 Ktor HttpClient(CIO) websocket 发送内容时如何捕获 Broken pipe 异常?

Ktor websockets 身份验证

ktor websocket flow api是如何工作的?