老谭笔记

Swift服务端Web框架Kitura初体验

Kitura是由IBM公司用Swift开发并开源的一个轻量级Web框架(https://github.com/IBM-Swift/Kitura),更新速度非常迅速,Swift3.0发布之后,Kitura便推出了1.0版本,目前最新的版本为1.2,并且Kitura也已经运用在IBM的PaaS平台BlueMix环境中,可谓Kitura让Swift在Web框架领域成为一种新鲜的生产力工具.

之前一直只闻其声,但从来没有实际使用过,今天在自己的服务器和本地都小试了一下,部署确实非常方便,大致记录一下这个过程.

在Linux中的部署

我自己的服务器环境是Ubuntu16.04.1(x64),这也是swift官网(swift.org)上描述支持的Linux环境.

1.安装基本的工具

1
2
$ sudo apt-get update
$ sudo apt-get install clang libicu-dev libcurl4-openssl-dev libssl-dev

2.下载Swift的工具包(最新版本请参见https://swift.org/download/)

1
2
wget https://swift.org/builds/swift-3.0.1-release/ubuntu1604/swift-3.0.1-RELEASE/swift-3.0.1-RELEASE-ubuntu16.04.tar.gz
tar -xzvf swift-3.0.1-RELEASE-ubuntu16.04.tar.gz

3.下载Kitura示例并编译

1
2
3
4
git clone https://github.com/IBM-Swift/Kitura-Sample.git
cd Kitura-Sample
export PATH=../swift-3.0.1-RELEASE-ubuntu16.04/usr/bin:$PATH
swift build

4.运行起来

1
.build/debug/Kitura-Sample

现在就可以访问试一下了,默认是开启的8090端口,http://your.server.ip.address:8090,默认的首页是一个Kitura的介绍页面,因为默认根路径未处理,所以就被转发到Kitura内部的默认处理页面了.Sample里面也有几个web接口示例,可尝试访问http://your.server.ip.address:8090/hello,会获取到一段文本,另外访问http://your.server.ip.address:8090/static这是Kitura提供的一个静态文件的Web服务器.

其实Kitura-Sample代码的内容是非常简单,除了对Kitura框架的依赖之外,有效代码就只有以下三个:

1
2
3
Kitura-Sample/Package.swift // swift包依赖配置文件
Sources/Kitura-Sample/main.swift // 进程的主入口
Sources/KituraSampleRouter/RouterCreator.swift // 对请求的逻辑处理

大致解读一下RouterCreator.swift的主要逻辑:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// Kitura提供的静态文件Web服务器(比如用来搭个静态博客还是不错的)
router.all("/static", middleware: StaticFileServer())
// 对于hello的请求,返回一段文本
router.get("/hello") { _, response, next in
response.headers["Content-Type"] = "text/plain; charset=utf-8"
let fName = name ?? "World"
try response.send("Hello \(fName), from Kitura!").end()
}
// 这个就是直接请求时,未知行为,通过next()被路由到Kitura内部的默认处理
router.all { request, response, next in
if response.statusCode == .unknown {
if request.originalURL != "/" && request.originalURL != "" {
try response.status(.notFound).send("Route not found in Sample application!").end()
}
}
next()
}

MAC环境下的部署

服务端开发一般都需要搭建一个本地的调试环境,而Kitura在MAC的本地部署就更简单了.

1.安装Xcode8.0及以上版本

2.下载Kitura示例并编译

1
2
3
4
git clone https://github.com/IBM-Swift/Kitura-Sample.git
cd Kitura-Sample
swift build
swift package generate-xcodeproj

此时就能看到Kitura-Sample目前中有一个KituraSample.xcodeproj工程文件,用Xcode打开选择Kitura-Sample这个Target,它是一个masOS的程序,但编译发现会发现有如下的报错:

1
ld: library not found for -lCHTTPParser for architecture x86_64

后面排查问题发现所依赖的CHTTPParser库(由Kitura-net间接依赖,位于Kitura-net目录下面的Sources文件夹下)的module.modulemap是这样的:

1
2
3
4
5
6
module CHTTPParser {
header "http_parser.h"
header "utils.h"
link "CHTTPParser"
export *
}

这样的写法在命令行下是没问题的,但在Xcode中则需要修改为:

1
2
3
4
5
6
module CHTTPParser {
header "http_parser.h"
header "utils.h"
link framework "CHTTPParser"
export *
}

然后编译运行,成功之后在浏览器中便可访问http://127.0.0.1:8090/