"Das Haus das Verrückte macht."
注意 (2021-11-09): 不建议在生产环境中使用此项目,尽管它仍然是一个不错的演示。 此项目更现代且非常值得推荐的版本是 Macro.swift,它基于 SwiftNIO(而不是像 Noze.io 那样基于 GCD)。
Noze.io 是一项尝试,旨在将 Node.js 的理念移植到纯 Swift 中。 它使用 libdispatch 来实现事件驱动、非阻塞的 I/O。 Noze.io 构建于类型安全、支持背压的拉取流(使用 Swift 泛型),并以批处理方式操作项目。 与其仅仅操作字节,不如操作 Unicode 行、数据库记录或 HTML 响应等批次数据 - 你懂的。 高效:流式处理一切并进行批处理。
重点是保持 API 与 Node 相似。 这并非总是可能 - Swift 不是 JavaScript - 但已经非常接近了。 它自带常用功能,Noze.io 是自包含的,不需要任何额外的依赖项。 它包含诸如 cows、leftpad、express 或 redis 等模块。
Noze.io 可以在 Cocoa 环境以及 Linux 上运行。 请访问我们的 Start 页面以获取安装说明。
这是一个好主意吗? 你 告诉我们。 不确定,但我们认为这可能是个好主意,因为:a) 虽然 Swift 看起来非常像 JavaScript,但它实际上是一种高性能的静态类型和 AOT 编译语言,b) 代码在 Swift 中通常看起来更好,主要是由于尾随闭包语法,c) 没有猴子补丁,同时仍然提供扩展。 也有缺点。
这里有一个相当大的简单、专注的集合:Noze.io 示例。 但是,这是“标准”的 Node 示例,一个 HelloWorld httpd
import http
http.createServer { req, res in
res.writeHead(200, [ "Content-Type": "text/html" ])
res.end("<h1>Hello World</h1>")
}
.listen(1337)
一个回声守护进程,只需将套接字的输入端管道连接到其自身的输出端
import net
net.createServer { sock in
sock.write("Welcome to Noze.io!\r\n")
sock | sock
}
.listen(1337)
更复杂的内容,包括一个 Todo-MVC 后端,可以在 Noze.io 示例中找到。 喜欢你所看到的? 请访问我们的 Start 页面开始使用。
嘿,我们喜欢反馈。 加入邮件列表、Slack 频道,或者直接给我们发送电子邮件,告诉我们为什么这个项目很糟糕(或者不糟糕?)。
操作系统 | Swift | Xcode | Make | SPM |
---|---|---|---|---|
macOS | 3.0 | Xcode 8 | 👍🏻 | 👍 |
macOS | 3.1 | Xcode 8.3 | 👍🏻 | 👍 |
tuxOS | 3.0.2 | 👍🏻 | 👍 | |
tuxOS | 3.1 | 👍🏻 | 👍 |
随着 Swift 3 的发布,Noze.io 停止支持 Swift 2.x。 如果您仍然有兴趣在 2.x 中使用它,则最后一个版本仍然可以在 GitHub 上的 legacy/swift23
分支中找到。
我们选择了传统的 Swift 方法:制作一些勉强可用,但可以演示的东西,并发布带有 3.0 版本标签的版本。 然后希望社区能够加入并填补空白。 嗯,差不多是这样。 它已经相当不错了! 😉
主要实现的是 happy path。 错误将会报错。 据推测,这种情况会随着时间的推移而改善。
Node 的一个巨大优势是 npm 包环境以及可用于它的无数个包。 或者等等,是吗? 好吧,至少我们包含了 leftpad。 我们希望 Swift 包环境也将发展壮大。
Noze.io 中有很多未完成的工作。 我们欢迎各种形式的贡献。
Noze.io 由 The Always Right Institute 和 ZeeZide 为您带来。 如果有更多人愿意加入这项工作,我们会非常高兴 :-)