轻量级的 Kotlin 异步 Web 框架 Next 发布 3.0.0.0

2021/02/02 08:00
阅读数 211

Cloudopt Next 是一个非常轻量级且现代的、基于 Kotlin 编写的全栈开发框架,同时支持 Java 和 Kotlin,可以处理 Url 的解析,数据的封装,Json 的输出等等,从根本上减少开发时间、提升开发体验。

Cloudopt Next 主要拥有以下特点:

简单 极简设计,几乎不要任何配置,不依赖 Tomcat、Jetty 等 Web 容器。

异步 基于 vertx 轻松实现高性能的异步服务。

扩展 支持 vertx 体系的各种组件,同时支持通过插件扩展功能,官方也提供了大量好用的插件。

中文 全中文文档、中文社区,帮助中文开发者快速上手。

3.0.0.0 主要变动是在升级了底层依赖、全面重构了反射、支持协程及全面实现非阻塞能力。其次是优化了 websocket 的使用和定制了很多协程相关的语法糖。

依赖升级

在 3.0.0.0 中对一些基础依赖进行了全面升级, JDK 升级到 11、Vertx 升级到 4.0.0、Kotlin 升级到 1.4.0。我们也建议在这样的环境下运行,较低的版本尚未做兼容性测试。

反射重构

对使用 Java 的开发者来说影响不大,主要是提升了 Kotlin 开发者的开发体验。

在新版中,对大部分的反射、扫描注解进行了重构。原本是使用 Java 原生的反射操作,现在全部改为了 Kotlin 原生的反射操作。改为 Kotlin 原生语法后对 Kotlin 的基础类型的支持更加友好、也避免了 Kotlin 类转回 Java 类的开销。

在反射上也全面支持了 kotlin 协程的 suspend 声明。

 

WebSocket 更新

请使用以下新的用法。现在支持更优雅的用法,只需要继承 WebSocketResource 并实现相应的方法即可。

@WebSocket("/websocket")
class WebSocketHandler : WebSocketResource {

override fun beforeConnection(resource: Resource): Boolean {
resource.request.response().statusCode = 400
resource.request.response().end()
return false
}

override fun onConnectionSuccess(websocket: ServerWebSocket) {
websocket.writeTextMessage("Connection successful!") {
println("The event of after write.")
}
val buffer: Buffer = Buffer.buffer().appendInt(123).appendFloat(1.23f)
websocket.writeBinaryMessage(buffer) {
println("The event of after write binary.")
}
}

override fun onConnectionFailure(throwable: Throwable) {

}

override fun onConnectionComplete(websocket: ServerWebSocket) {

}

override fun onFrameMessage(frame: WebSocketFrame, websocket: ServerWebSocket) {
println(frame.textData())
websocket.writeTextMessage("This is the message from the server!")
}

override fun onTextMessage(message: String, websocket: ServerWebSocket) {
println(message)
websocket.writeTextMessage("This is the message from the server!")
}

override fun onBinaryMessage(buffer: Buffer, websocket: ServerWebSocket) {

}

override fun onPingPong(buffer: Buffer, websocket: ServerWebSocket) {
println("Pong...")
}

override fun onException(throwable: Throwable, websocket: ServerWebSocket) {
throwable.printStackTrace()
if (!websocket.isClosed) {
websocket.close()
}
}

override fun onDrain(websocket: ServerWebSocket) {

}

override fun onEnd(websocket: ServerWebSocket) {
println("Connection was closed.")
}


}

支持协程

3.0.0.0-BETA1 开始支持 Kotlin 协程及 await 语法。目前 Interceptor、 Validator、 Route 都已经支持协程(suspend 和 await)。Handler 没有支持打算,主要是因为 Handler 涉及到的地方很多,基本每一步都有,理论上在 Handler 中就不应该放阻塞的、处理时间长的代码,更适合做像是日志输出等等。如果需要使用阻塞代码建议使用 Worker.worker 这种专门运行阻塞代码的方法。

同时 Next 对协程做了大量的优化封装。首先是对所有的类都注册了 worker 和 await 两个语法糖,你可以在任何的类中进行使用。在运行阻塞代码时会自动调用 vertx 的 executeBlocking() 来运行。

如:

fun test() {
var id = worker<Int>({ handler ->
handler.complete(1)
}, { asyncResult ->
//onComplete
})
}suspend fun test() {
var id = await<Int> { handler ->
handler.complete(1)
}
}

新的插件

增加了全新的非阻塞的 redis 操作插件及 rocketmq 插件。

全新的 Cache 插件

cloudopt-next-cache 是基于 caffeine 和 lettuce 的分布式二级缓存插件。 参考了 J2Cache,重新实现了一个非阻塞的分布式二级缓存插件。

---------------------------------------------------------------------------------------

更新详情:https://www.yuque.com/cloudopt/next/xg50uq

GitHub 地址:https://github.com/cloudoptlab/cloudopt-next

码云地址: https://gitee.com/cloudopt/cloudopt-next


本文分享自微信公众号 - Cloudopt(cloudopt)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
加载中

作者的其它热门文章

打赏
0
0 收藏
分享
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部