websocket - 使用Kotlin和WebSockets的SparkJava

标签 websocket kotlin spark-java

我正在尝试使用SparkJava进行Kotlin,并且在实现WebSockets路由时遇到了麻烦。我正在尝试遵循SparkJava网站(http://sparkjava.com/tutorials/websocket-chat)上可用的WebSockets示例,尽管我可以使OnWebSocketConnect和OnWebSocketMessage元素正常工作,但并未选择OnWebSocketClose。

我已经在Java中实现了此功能,以再次检查它是否不是浏览器问题,并且Java实现工作正常...因此,这似乎是Kotlin解释OnWebSocketClose批注的方式所特有的。

我的代码如下所示

import spark.Spark.*
import org.eclipse.jetty.websocket.api.Session
import org.eclipse.jetty.websocket.api.annotations.*;

fun main(args: Array<String>) {
    staticFileLocation("/public")
    webSocket("/chat", WSHandler::class.java)
    init()
}

@WebSocket
class WSHandler {

    @OnWebSocketConnect
    fun connected(session: Session) = println("session connected")

    @OnWebSocketClose
    fun closed(session: Session, statusCode: Int, reason: String) = println("closed sessions")

    @OnWebSocketMessage
    fun message(session: Session, message: String) = println("Got: $message")
}

html / javascript等均根据SparkJava网站上的教程进行。

最佳答案

closed类深处调用org.eclipse.jetty.websocket.common.events.annotated.CallableMethod方法时,出现以下错误:

Parameter specified as non-null is null: method webchat.WSHandler.closed, parameter reason



它与Kotlin的可空性功能有关,当您使用以下签名声明方法时,所有功能都可以正常工作:
fun closed(session: Session, statusCode: Int, reason: String?)

关于websocket - 使用Kotlin和WebSockets的SparkJava,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44662272/

相关文章:

kotlin - 当 func 重载时,kotlin 如何确定调用哪个 func?

kotlin - 通过POJO伪装QueryMap的用法

java - 为什么 Sparkjava 不适合生产?

ruby - WebSocket 和 Redis 导致来自 pubsub 和/或 brpop 的连接挂起

testing - 如何使用 jmeter 在 websocket 采样器中配置 csv 数据集?

android - 如何对包裹在 `runOnUiThread` 中的代码进行单元测试?

java - 如何在sparkjava中以声明方式管理事务?

java - SparkJava - 区分大小写的端点

jboss - 使用 Tyrus 向 JBOSS 7 添加 websocket 支持(WebSocket 引用实现)

spring - 使用 SockJS 提供身份验证 header