#zenoh #pub-sub #back-end #storage #plugin #url

zenoh-plugin-webserver

实现 HTTP 服务器并映射 URL 到 Zenoh 键表达式的 Zenoh 插件

9 个版本 ()

1.0.0-alpha.6 2024 年 8 月 6 日
1.0.0-alpha.52024 年 7 月 26 日
1.0.0-alpha.2 2024 年 6 月 21 日
0.11.0 2024 年 6 月 4 日
0.0.0 2022 年 12 月 7 日

#56HTTP 服务器

Download history 151/week @ 2024-04-29 136/week @ 2024-05-13 9/week @ 2024-05-20 117/week @ 2024-06-03 73/week @ 2024-06-17 9/week @ 2024-06-24 93/week @ 2024-07-08 5/week @ 2024-07-15 71/week @ 2024-07-22 117/week @ 2024-07-29 92/week @ 2024-08-05

每月 292 次下载

EPL-2.0 OR Apache-2.0

32KB
436

CI Discussion Discord License License

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 客户端浏览文件。

以下是步骤

  1. 确保zenoh路由器可用文件系统后端和Web服务器插件库
    要么安装它们的包(取决于您的平台),要么下载对应平台库文件到您的~/.zenoh/lib目录。
  2. 将网站文件复制到~/.zenoh/zbackend_fs/my-site目录(或将其设置为指向您的网站路径的符号链接)
  3. 创建一个包含以下内容的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
              }
            }
          }
        }
      }
    }
    
  4. 启动zenoh路由器(zenohd)。它将自动加载Web服务器插件并使其在端口8080上可用。它还会创建一个存储,响应以my-site/开头的键表达式上的任何zenoh查询。
    现在您可以在https://127.0.0.1:8080/my-site上浏览您的站点。

对于更复杂的使用案例,您还可以

  • 将您网站的文件存储在不同的主机上。在每个主机上运行具有文件系统存储的zenoh路由器可以使所有文件在my-site/ zenoh键下可用。
  • 在多个主机上复制您网站的文件以提供容错性。
  • 在不同的主机上启动具有Web服务插件的多个zenoh路由器(不一定是运行文件系统存储的主机)。每个主机都将为您提供服务。
  • 使用除文件系统之外的其他后端存储资源并通过zenoh使其可用。(可用的后端列表这里)。
  • 部署一个实现eval函数的zenoh应用程序,以动态内容响应请求(请参阅RustPython中的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