使用 Kotlin 和 WebSockets 的 SparkJava
SparkJava using Kotlin and WebSockets
我正在使用 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 网站上的教程进行。
在 org.eclipse.jetty.websocket.common.events.annotated.CallableMethod
class 深处调用 closed
方法时出现错误,并显示以下消息:
Parameter specified as non-null is null: method
webchat.WSHandler.closed, parameter reason
它与 Kotlin 的可空性特性有关,当您使用下面的签名声明您的方法时一切正常:
fun closed(session: Session, statusCode: Int, reason: String?)
我正在使用 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 网站上的教程进行。
在 org.eclipse.jetty.websocket.common.events.annotated.CallableMethod
class 深处调用 closed
方法时出现错误,并显示以下消息:
Parameter specified as non-null is null: method webchat.WSHandler.closed, parameter reason
它与 Kotlin 的可空性特性有关,当您使用下面的签名声明您的方法时一切正常:
fun closed(session: Session, statusCode: Int, reason: String?)