网站首页 > 技术文章 正文
之前,我们都是通过Apache OpenWhisk 来使用Kotlin Serverless功能。为什么会是这种情况呢?这是因为Kotlin Native应用程序是不能在JVM中运行的,必须依靠OpenWhisk、Vagrant和Virtual Box等等。
Kotlin Native Serverless
首先,要设置环境:
使用ssh登录机器:
$ vagrant ssh
直接测试,使用上传到Docker 的Docker容器 :
如果要新的测试动作,只需运行:
输出结果如下:
OpenWhisk允许使用docker容器,并包含一个在动作调用时执行的二进制文件。二进制文件使用JSON字符串接收1个参数,并且需要返回一个JSON字符串。
首先是安装和配置kotlin native:
注意:最后一行可能导致错误,因为没有为编译器提供任何参数。
现在开始创建项目,初步设置如下:
使用gradle.properties指定kotlin-native的安装位置:
konan.home=/kotlin-native/dist
在src / main.kt文件夹中创建一个简单的main:
编译:
$ gradlew clean build
使用clean build的原因是文件修改之后,有时gradle不会重新编译文件。
由于在此没有使用JVM构建任何Java代码,所以这里使用C JSON库。
首先克隆或者是在git中创建一个子模块:
创建shell脚本将C代码编译成可以使用的库:
该脚本将创建一个LLVM格式的库 ,这是Kotlin Native使用的体系结构。
更新gradle脚本来编译C代码,并将其链接到程序中:
最后,我们需要为C代码添加一个定义文件,这样Kotlin可以为它创建和存根。
该文件应放在src / c_interop / Parson.def中:
检查一切是否正常:
生成文件:
build/clang/parson.bc - 这是链接库。
build/konan/interopStubs/genParsonInteropStubs/Parson/Parson.kt - 这是用于调用库的Kotin存根。
使用parson来修改程序:
为了能够调用Parson,创建Kotlin/Native互操作性功能:
再次构建程序后,我们可以这样使用:
现在,我们需要为它创建一个docker。OpenWhisk具有基于alpine linux的docker base image。任何人都可以通过docker base image来制作Kotlin Native Serverless功能。
image的docker文件是:
因为构建需要使用gradle,所以选择了openjdk 8,使用OpenWhisk提供的actionProxy python3脚本来创建一个可以通过HTTP服务于操作的flask服务器。操作放在folder /action中,并命名为exec。
为fibonacci功能创建一个docker image:
最后,创建一个简单的脚本来发布docker hub中的镜像:
以相同的方式将文件添加到docker中,运行该命令来更新映像。
最后将所有内容汇总在一起:
这是学习Kotlin Native很好的例子,对Kotlin将来使用更多功能会很有帮助!
猜你喜欢
- 2024-09-21 除了简洁,与Java互操作,Kotlin超过Java还有哪些优势?
- 2024-09-21 Java老矣!它的继承者在这几年究竟经历了什么
- 2024-09-21 开发一个支持跨平台的 Kotlin 编译器插件
- 2024-09-21 快速上手,使用 Kotlin 把支付宝小程序装进自己的App
- 2024-09-21 Kotlin 1.5新特性大揭秘:编程世界的全新飞跃
- 2024-09-21 SpringNative:把Spring项目编译成原生程序
- 2024-09-21 为什么 Flutter 使用 Dart 而不是另一种“更好”的语言
- 2024-09-21 一个项目,四种方式实现(Flutter、Kotlin、Weex、RN)
- 2024-09-21 AWS SDK for Kotlin 和 AWS SDK for Rust 上线!
- 2024-09-21 Spring Native 中文文档(spring5中文文档)
- 1514℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 564℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 508℃MySQL service启动脚本浅析(r12笔记第59天)
- 486℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 485℃启用MySQL查询缓存(mysql8.0查询缓存)
- 465℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 445℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 442℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- c语言min函数头文件 (68)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)