Cloudopt Next 是一个非常轻量级且现代的、基于 Kotlin 编写的全栈开发框架,同时支持 Java 和 Kotlin,您可以处理Url的解析,数据的封装,Json的输出等等,从根本上减少开发时间、提升开发体验。
Cloudopt Next 主要拥有以下特点:
简单 极简设计,几乎不要任何配置,不依赖 Tomcat、Jetty 等 Web 容器。
异步 基于 vertx 轻松实现高性能的异步服务。
扩展 支持 vertx 体系的各种组件,同时支持通过插件扩展功能,官方也提供了大量好用的插件。
中文 全中文文档、中文社区,帮助中文开发者快速上手。
GitHub:
开源中国:
性能
测试电脑的 CPU 是 2.2 GHz 六核 Intel Core i7,内存为 16 GB 2400 MHz DDR4。
吞吐量参数为用户数 10,循环 10000 次。
框架名称 | 吞吐量 |
Cloudopt Next | 20267.5/sec |
Spring Boot | 10698.2/sec |
Flask | 440.8/sec |
根据性能测试结果:Cloudopt Next 的性能是 Flask 的 50 倍,是 Spring Boot 的两倍。
示例
您可以通过访问Cloudopt Next的官网来查看文档,也可以前往Example查看简单的示例。
路由
让我们来看看一个简单的基于Cloudopt Next的路由:
"/") (class IndexController : Resource() { fun get(){ renderHtml(view = "index") } }
value = "/") (public class IndexController extends Resource { public void get(){ View v = new View(); v.setView("index"); renderHtml(v); } }
启动
fun main(args: Array<String>) { NextServer.run() }
public static void main(String args[]) { NextServer.run(); }
超好用的协程
var value = await<String>{handler-> handler.complete(RedisManager.sync().get("key")) }
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.") } }
SockJS
"/socket/api/*") (class SocketController : SocketJSResource { override fun handler(userSocketConnection: SockJSSocket) { println(userSocketConnection) userSocketConnection.handler {message-> println(message) userSocketConnection.write("Hello world!") } } }
插件
fun main(args: Array<String>) { NextServer.addPlugin(TestPlugin()) NextServer.addPlugin(EventPlugin()) NextServer.run() }
寻求帮助
在使用Cloudopt Next的过程中遇到了问题?您可以通过下面途径寻求帮助:
- 请关注我们的推特,以便获得最新的信息。
- 请仔细检查参考文档,查看具体的代码案例或者是常见问题。
- 如果您在升级版本以后遇到问题,可以查看 Wiki 中的升级说明。
- 请发送邮件到 support@cloudopt.net
- 请在 GitHub 发送 Issue 提交您的问题,我们将尽快为您解答。
- 如果您在中国,还可以加入交流QQ群:557692142。
报告问题
Cloudopt Next使用GitHub的问题跟踪系统,以记录bug和特性请求。如果您想提出一个问题,可以参考下面的建议:
- 请您先尝试搜索一下是否有相关的问题。
- 请尽可能的提供详细的错误信息或者报告,包括正在使用的Cloudopt Next的版本、Java版本或者Kotlin版本等等。
许可协议
Cloudopt Next 是一个开源项目,遵循 Apache 2.0许可协议。
旧版文档
2.x
https://github.com/cloudoptlab/cloudopt-next/releases/tag/2.0.8.1-BETA
公众号
关注公众号,第一时间获得更新资讯。