技术开发 频道

手把手教你使用Kotlin Native无服务器功能!

  【IT168 编译】之前,我们都是通过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将来使用更多功能会很有帮助!

0
相关文章