From a8e8063fe7b02e5af3fd4f46622e7f82f029602d Mon Sep 17 00:00:00 2001 From: RTAkland Date: Sat, 3 Jan 2026 06:21:49 +0800 Subject: [PATCH] Add http client releated api, and add chinese docs --- README-zh.md | 160 ++++++++++++++++++ README.md | 21 ++- build.gradle.kts | 2 +- images/avg-cpu-time.png | Bin 0 -> 51560 bytes .../kotlin/cn/rtast/cfworker/client/fetch.kt | 20 ++- 5 files changed, 200 insertions(+), 3 deletions(-) create mode 100644 README-zh.md create mode 100644 images/avg-cpu-time.png diff --git a/README-zh.md b/README-zh.md new file mode 100644 index 0000000..907827d --- /dev/null +++ b/README-zh.md @@ -0,0 +1,160 @@ +# Kotlin cloudflare worker + +纯Kotlin编写的库,可以在Cloudflare worker上运行Kotlin/JS + +# 快速开始 + +## 配置 + +> 项目依赖于Kotlin协程库, 请确保协程库版本号大于`1.10.2` + +```kotlin +plugins { + kotlin("multiplatform") version "2.2.21" +} + +repositories { + mavenCentral() + maven("https://repo.maven.rtast.cn/releases") +} +``` + +```kotlin +// 最新版本请前往下方链接查看 +// https://next.pkg.rtast.cn/#/releases/cn/rtast/kotlin-cfworker/kotlin-cloudflare-worker/ +implementation("cn.rtast.kotlin-cfworker:kotlin-cloudflare-worker:1.0.2") +``` + +## Hello world程序 + +```kotlin +kotlin { + js(IR) { + nodejs { + outputModuleName = "kotlin-cloudflare-worker" + binaries.executable() + } + } +} +``` + +> Minimal hello world app + +```kotlin +/** + * 不要修改这个函数的任何内容 + */ +fun main() { + @Suppress("unused_expression") + val eventListener = EventListener { event -> + val dyn = event.asDynamic() + event.asDynamic().respondWith(handleRequest(dyn.request as Request)) + Unit + } + js("addEventListener('fetch', eventListener)") +} + +/** + * 这里是处理http请求的函数 + */ +@JsExport +fun handleRequest(request: Request): Promise = GlobalScope.promise { + val server = WorkerApplication().apply { + route("/") { + respondText("Hello kotlin cloudflare worker") + } + } + return@promise server.handle(request) +} + +``` + +> 在本地运行之前需要先安装wrangler + +在项目根目录创建一个名为`wrangler.toml`的文件,然后将下面的内容复制进去并修改为你自己的信息 + +```toml +name = "kotlin-cloudflare-worker" # 可以是任何名字 +account_id = "" +workers_dev = false +preview_urls = false +compatibility_date = "2022-08-11" +main = "kotlin-cloudflare-worker.js" # 必须和`outputModuleName`一致 +``` + +运行gradle任务编译出js `gradlew compileProductionExecutableKotlinJs`, +将wrangler.toml复制到 `build/compileSync/js/main/productionExecutable/kotlin`, +并且进入该目录下运行`wrangler dev` + +## 部署 + +使用`wrangler deploy`来部署到cloudflare worker, 在此之前你需要先使用`wrangler login`来登录 + +# 注意事项 + +Cloudflare worker 使用V8引擎来驱动js脚本,线程模型为单线程,所有时间均有event loop(事件循环)驱动,在此之外的所有任务 +都会被drop, 所以不要使用协程库中的launch或任何可以凭空创建出一个挂起作用域的函数来调用suspend函数, 取而代之的是你需要从 +`handleRequest`方法中传播`CoroutineScope`(suspend), 就像下面这样 + +```kotlin +// 不要使用这种方法 +val scope = CoroutineScope(Dispatcher.DEFAULT) + +fun blockingFunction() { + scope.launch { + // 这里的代码永远不会被执行 + } +} + +// 使用下面的代码来正确的调用suspend函数 + +fun main() { + @Suppress("unused_expression") + val eventListener = EventListener { event -> + val dyn = event.asDynamic() + event.asDynamic().respondWith(handleRequest(dyn.request as Request)) + Unit + } + js("addEventListener('fetch', eventListener)") +} + +@JsExport +fun handleRequest(request: Request): Promise = GlobalScope.promise { + return Promise.resolve(Response("Hello")) +} +``` + +# Http 客户端 + +不要使用ktor来作为http客户端, 因为cloudflare worker不是一个标准的nodejs环境, 你需要使用 fetch +`cn.rtast.cfworker.client.fetch` 来发送http请求, 注意不是`window.fetch`, `window.fetch`是浏览器API + +# ByteArray 和 ByteBuffer 转换 + +```kotlin +import cn.rtast.cfworker.util.toByteArray +import cn.rtast.cfworker.util.toArrayBuffer + +val bb: ByteBuffer = ... +// 将ByteBuffer转换为ByteArray +val ba: ByteArray = bb.toByteArray() + +// 将ByteArray转换为ByteBuffer +val bb2: ByteBuffer = ba.toArrayBuffer() +``` + +# CPU时间限制 + +cloudflare worker 免费版本限制处理每个请求的CPU时间为10ms(不包括IO等待时间), 如果你需要执行CPU密集型任务或需要更高的配额, +请考虑升级到Workers paid或使用JS来减少标准库和协程库的加载时间. + +即使使用此库注册了超过15个api端点,并且都具备文件处理功能,每个请求占用的cpu时间平均值不超过10ms+-2ms, +在冷启动时处理首次请求时间会大幅增加,最高可达50ms,但worker仍然可以处理并返回请求. + +![avg-cpu-time](./images/avg-cpu-time.png) + +> 上图反应了过去24小时每个请求的平均cpu时间(P50) + +# 已经使用此项目的实例 + +https://repo.maven.rtast.cn \ No newline at end of file diff --git a/README.md b/README.md index bd428a4..9a355dc 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,11 @@ A library to running kotlin/js on cloudflare worker. +
+English +中文 +
+ # Get started ## Setup @@ -22,7 +27,7 @@ repositories { ```kotlin // to get latest version of this lib, go to // https://next.pkg.rtast.cn/#/releases/cn/rtast/kotlin-cfworker/kotlin-cloudflare-worker/ -implementation("cn.rtast.kotlin-cfworker:kotlin-cloudflare-worker:1.0.1") +implementation("cn.rtast.kotlin-cfworker:kotlin-cloudflare-worker:1.0.2") ``` ## Run app @@ -148,6 +153,20 @@ val ba: ByteArray = bb.toByteArray() val bb2: ByteBuffer = ba.toArrayBuffer() ``` +# CPU Time limit + +Cloudflare worker free tier have a limit of worker cpu limit (10ms, exclude IO waiting time), `kotlin cloudflare worker` +depends on `kotlin-stdlib` and `kotlinx.coroutines`, which are quite heavy*, When performing CPU-bound task, +please carefully consider whether to use JavaScript instead of Kotlin. + +But it works for my maven repository, I registered over 15 api endpoints. +The avg cpu time for each endpoint does not exceed 10ms, but it may increase significantly during +cold start (Over 50-200ms, but still responsible) + +![avg-cpu-time](./images/avg-cpu-time.png) + +> This image shows last 24 hours avg cpu time, see `P50` + # Real instance https://repo.maven.rtast.cn diff --git a/build.gradle.kts b/build.gradle.kts index c6f434a..22daa89 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -4,7 +4,7 @@ plugins { } group = "cn.rtast.kotlin-cfworker" -version = "1.0.1" +version = "1.0.2" repositories { mavenCentral() diff --git a/images/avg-cpu-time.png b/images/avg-cpu-time.png new file mode 100644 index 0000000000000000000000000000000000000000..936659eecb07916c8b9ef0912a980180848e64c9 GIT binary patch literal 51560 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 \ No newline at end of file +): Promise + +/** + * Get request raw body, http POST + */ +public suspend fun Request.rawBody(): ByteArray = + this.arrayBuffer().await().toByteArray() + +/** + * Get [URL] object + */ +public val Request.Url: URL get() = URL(this.url) \ No newline at end of file