9 个版本 ()
新 1.0.0-alpha.6 | 2024 年 8 月 6 日 |
---|---|
1.0.0-alpha.5 | 2024 年 7 月 26 日 |
1.0.0-alpha.2 |
|
0.11.0 | 2024 年 6 月 4 日 |
0.0.0 |
|
#56 在 HTTP 服务器
每月 292 次下载
32KB
436 行

Eclipse Zenoh
Eclipse Zenoh:零开销的 Pub/sub、存储/查询和计算。
Zenoh(发音为 /zeno/)统一了运动中的数据、静态数据和计算。它将传统的 pub/sub 与地理分布式的存储、查询和计算巧妙地结合在一起,同时保持了超越任何主流堆栈的时间和空间效率。
请访问网站 zenoh.io 和 路线图 了解更多详细信息。
Web 服务器插件
Web 服务器插件实现了一个将 URL 映射到 Zenoh 键的 HTTP 服务器。
此插件可用于设置 Web 服务器,其中资源来自地理分布的 Zenoh 存储,每个存储都利用各种后端(文件系统、数据库、内存等)。
库名称 zenoh_plugin_webserver
👉 下载稳定版本: https://download.eclipse.org/zenoh/zenoh-plugin-webserver/
👉 构建 "main" 分支:见 下面
⚠️ 旧版本 0.5 的文档
以下文档与 "main" 分支中正在开发中的 0.6.x 版本相关。
有关旧版本,请参阅相应标记版本的 README 和代码。
使用示例
假设您有一个静态网站,您可以使用
- 使用 文件系统后端 将文件作为 Zenoh 键/值公开
- 设置此 Web 服务器插件,该插件将允许 HTTP 客户端浏览文件。
以下是步骤
- 确保zenoh路由器可用文件系统后端和Web服务器插件库
要么安装它们的包(取决于您的平台),要么下载对应平台库文件到您的~/.zenoh/lib
目录。 - 将网站文件复制到
~/.zenoh/zbackend_fs/my-site
目录(或将其设置为指向您的网站路径的符号链接) - 创建一个包含以下内容的
zenoh.json5
配置文件{ plugins: { webserver: { http_port: 8080, }, storage_manager: { volumes: { fs: {} }, storages: { demo: { key_expr: "my-site/**", strip_prefix: "my-site", volume: { id: "fs", dir: "my-site", read_only: true } } } } } }
- 启动zenoh路由器(
zenohd
)。它将自动加载Web服务器插件并使其在端口8080上可用。它还会创建一个存储,响应以my-site/
开头的键表达式上的任何zenoh查询。
现在您可以在https://127.0.0.1:8080/my-site上浏览您的站点。
对于更复杂的使用案例,您还可以
- 将您网站的文件存储在不同的主机上。在每个主机上运行具有文件系统存储的zenoh路由器可以使所有文件在
my-site/
zenoh键下可用。 - 在多个主机上复制您网站的文件以提供容错性。
- 在不同的主机上启动具有Web服务插件的多个zenoh路由器(不一定是运行文件系统存储的主机)。每个主机都将为您提供服务。
- 使用除文件系统之外的其他后端存储资源并通过zenoh使其可用。(可用的后端列表这里)。
- 部署一个实现
eval
函数的zenoh应用程序,以动态内容响应请求(请参阅Rust或Python中的z_eval
示例)。
配置
在其配置部分,插件支持以下设置
http_port
- int或string - 必需的
要么是整数形式的端口号,要么是具有以下格式的字符串:"<local_ip>:<port_number>"
故障排除
地址已在使用中
如果在zenohd
日志中看到此类错误日志在启动时
[2021-04-12T14:20:51Z ERROR zenoh_plugin_webserver] Unable to start http server for REST : Os { code: 48, kind: AddrInUse, message: "Address already in use" }
这意味着另一个进程已经在使用Web服务器插件想要使用的端口号。在这种情况下,您有两个解决方案
- 停止使用该端口号的其他进程
- 更改Web服务器插件的
listener
选项以使用另一个端口。
权限被拒绝
如果在zenohd
日志中看到此类错误日志在启动时
[2021-04-12T13:55:10Z ERROR zenoh_plugin_webserver] Unable to start http server for REST : Os { code: 13, kind: PermissionDenied, message: "Permission denied"
这可能意味着您的操作系统(这通常发生在Linux上)禁止非root用户使用配置的端口号(实际上它通常限制0到1024之间的所有端口)。在这种情况下,您有两个解决方案
- 以root权限运行zenohd(通过
sudo
) - 使用另一个端口更改Web服务器插件的
listener
选项。
如何构建它
⚠️ 警告 ⚠️ : Zenoh及其生态系统正在积极开发中。当您从git构建时,请确保您还从git构建您计划使用的任何其他Zenoh存储库(例如,绑定、插件、后端等)。可能发生的情况是一些git中的更改与最新的打包Zenoh版本不兼容(例如,deb、docker、pip)。我们在保持Zenoh项目中各种git存储库之间的兼容性方面投入了特别努力。
⚠️ 警告 ⚠️ : 由于Rust没有稳定的ABI,插件应使用与
zenohd
相同的Rust版本构建,并且对于zenoh
依赖项使用相同的版本(或提交号)。否则,zenohd
和库之间共享类型内存映射的不兼容性可能导致"SIGSEV"
崩溃。
首先,安装Cargo和Rust。如果您已经安装了Rust工具链,请确保它是最新的。
$ rustup update
要了解zenohd
是用哪个Rust版本构建的,请使用--version
选项。
示例
$ zenohd --version
The zenoh router v0.6.0-beta.1 built with rustc 1.64.0 (a55dd71d5 2022-09-19)
在这里,zenohd
是用rustc版本1.64.0
构建的。
使用以下命令安装和使用此工具链
$ rustup default 1.64.0
zenohd
版本对应于id为1f20c86
的未发布提交。使用以下命令更新Cargo.lock中的zenoh
依赖项
$ cargo update -p zenoh --precise 1f20c86
然后使用以下命令构建后端
$ cargo build --release -p zenoh-plugin-webserver
依赖项
~30–43MB
~708K SLoC