惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

SecWiki News
SecWiki News
I
InfoQ
The Cloudflare Blog
人人都是产品经理
人人都是产品经理
博客园 - Franky
T
Tailwind CSS Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
量子位
博客园_首页
罗磊的独立博客
V
V2EX
李成银的技术随笔
大猫的无限游戏
大猫的无限游戏
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
True Tiger Recordings
Vercel News
Vercel News
Cyberwarzone
Cyberwarzone
Cisco Talos Blog
Cisco Talos Blog
F
Fox-IT International blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
M
Microsoft Research Blog - Microsoft Research
Know Your Adversary
Know Your Adversary
爱范儿
爱范儿
The Register - Security
The Register - Security
G
Google Developers Blog
The Hacker News
The Hacker News
Malwarebytes
Malwarebytes
S
Securelist
博客园 - 三生石上(FineUI控件)
Jina AI
Jina AI
T
Threat Research - Cisco Blogs
T
The Exploit Database - CXSecurity.com
S
SegmentFault 最新的问题
博客园 - 叶小钗
F
Fortinet All Blogs
Apple Machine Learning Research
Apple Machine Learning Research
宝玉的分享
宝玉的分享
博客园 - 聂微东
T
Threatpost
博客园 - 【当耐特】
D
Docker
P
Privacy & Cybersecurity Law Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
G
GRAHAM CLULEY
V
Visual Studio Blog
C
Cisco Blogs
IT之家
IT之家
S
Security Archives - TechRepublic
Latest news
Latest news
阮一峰的网络日志
阮一峰的网络日志

Kevin Blog

产品随想 2 产品力与人才密度 产品随想 1 做营销还是做产品 Play PyTorch Stable Diffusion and ONNX, Ollama on Intel Core Ultra 5 225H Ubuntu 25.04 Play with ROCm, PyTorch, Ollama on Ubuntu 24.04 and 780m 写在新的旅程开始前 想念自然与青春 懒猫微服体验——自由协作的神器 没有光纤的日子怎么上网?自制 Home WI-FI! Swift on Server Tour 6 关联 User 和 Post Swift on Server Tour 5 创建 Users Swift on Server Tour 4 构建 Post Controller Swift on Server Tour 3 构建 Post 的 API 将不懂的日语一拍扫尽,介绍捧读全新的「OCR 工作台」功能 Swift on Server Tour 2 连通你的数据库与服务器 Swift on Server Tour 0: 为什么这可能是你的好选择 纪念左耳朵耗子 How to learn Japanese by reading Novels and News with the help of Oyomi. Write WebAssembly in Swift and use it in Swift App BenQ WiT ScreenBar Halo 体验报告 记录 2021 年考驾照的体验 捧读的 EPUB 日语轻小说阅读器来了 使用 Go Mobile 开发跨平台 Library 使用 Kotlin Native 开发跨平台 Library 小番茄 - 一个只有陪伴的自习室
Swift on Server Tour 1 你的第一个 Server App 以及它背后的故事
2023-06-25 · via Kevin Blog

在这一章中,我们将了解如何配置 Swift on Server 的开发环境,创建第一个 Server 上的 Hello, World. 在此之上,我们还要简单聊一聊访问 Server App 背后的一些技术细节.

.. toc:: Table of Contents :max-level: 3

配置 Swift on Server 的开发环境

得益于 Swift 开源的特性,Swift 也可以在 Linux 上进行开发,同样,在 Swift Server Workgroup 的努力下,VSCode 也可以成为一个称职的 Swift 编辑器,因此,为了让不同类型的用户都可以很好的阅读,本系列文章将使用 VSCode 作为编辑器。

安装 Swift

SSWG 发布了 swiftly 可以帮助大家在 Linux 上轻松的安装 Swift

curl -L https://swift-server.github.io/swiftly/swiftly-install.sh | bash
swiftly install latest

除此之外, Apple 的 Download Swift 也提供了不同平台的安装指南。

配置 VSCode

安装 Swift Extension for Visual Studio Code 插件即可

创建 Hello World

我创建了一个叫做 1 的文件夹,来存放本章的代码,你也可以像我一样,使用下面的命令创建

mkdir 1

作为一个 Swift 工程,我们第一件事就是创建一个 Package.swift 文件,来描述工程

// swift-tools-version:5.8
import PackageDescription

let package = Package(
    name: "HelloWorld",
    platforms: [
       .macOS(.v12)
    ],
    dependencies: [
        .package(url: "https://github.com/vapor/vapor.git", from: "4.77.0"),
    ],
    targets: [
        .executableTarget(
            name: "App",
            dependencies: [
                .product(name: "Vapor", package: "vapor")
            ]
        ),
    ]
)

随后,创建 1/Sources/App/main.swift 文件

import Vapor

let app = Application()

app.http.server.configuration.port = 8080

defer { app.shutdown() }

app.get { req async in
    "It works!"
}

try app.run()

在文件夹 1 的根目录中使用 swift run 运行代码,或者在 VSCode 的 Run & Debug 中点击执行

Hint

通常来说,当你保存 Package.swift 文件时,Swift 的 VSCode 插件会自动帮你在项目根目录生成 .vscode/launch.json 文件,从而使得 Run & Debug 功能可以正常运行。

Untitled.png

经过编译后,你会看到 Server 运行起来的提示

[Vapor] Server starting on http://127.0.0.1:8080

在浏览器中访问 http://127.0.0.1:8080, 此时你就会看到老朋友 It works 了

Untitled 1.png

恭喜你,第一个 Server App 已经写好了!

浏览器是如何访问到 Server App 的?

要理解这个问题,我们可以从浏览器访问的地址 http://127.0.0.1:8080 入手,这个地址可以拆解成 3 部分

  • http - 希望使用的协议名
  • 127.0.0.1 - 希望访问的 IP 地址
  • 8080 - 希望访问的 IP 地址所对应的机器的端口

当你按下回车的时候,浏览器会根据 HTTP 协议,制作出下如下内容

GET / HTTP/1.1
Host: 127.0.0.1:8080

随后这个内容会被送往 IP 地址 127.0.0.1 所代表的机器,找到 8080 这个端口,递给在这里等着的 Server App.

Hint

127.0.0.1 是一个特殊的保留地址,用以表示访问本机,使用这个地址时,它实际上是指向发出请求的机器

现在我们可以回顾一下 Server App 的代码做了什么

// 在本机的 8080 端口监听
app.http.server.configuration.port = 8080

// 如果有请求抵达,使用 GET 访问的路径 / 那么返回文字 It works!
app.get { req async in
    "It works!"
}

而事实上,我们的 Server App 传回的是像这样的内容

HTTP/1.1 200 OK
content-type: text/plain; charset=utf-8
content-length: 9

It works!

浏览器拿到这份数据后,首先通过 200 这个 HTTP 状态码得知请求成功,而 content-type 部分则告诉浏览器,传回的数据是使用 utf-8 字符编码的 text/plain(纯文本)内容长度是 9.

最终根据这些信息,浏览器决定在页面上为我们显示 It works! 这段文字

Untitled 1.png

这有来有回的数据交换,便是一次最基础的 Server App 应用,在其背后便是 TCP/IP 网络协议在支撑,TCP/IP 协议非常精巧复杂,上面的 HTTP 只是 TCP/IP 四层结构中最顶端的应用层。

构建简单的 Server App 并不需要很多 TCP/IP 的知识,但随着业务增长,面临的问题逐渐复杂,了解 TCP/IP 能帮助我们解决很多问题,不过,这不在本系列文章的讨论范围了,请读者伴随着日后的业务需求,自行探索吧。

本章代码可以在 Github 上找到 https://github.com/kevinzhow/swift-on-server-tour

下章预告

在下一章中,我们开始使用 Vapor 连接数据库,完成对数据库的增删改查,并探索一下这些操作的背后是如何完成的。