服务功能

服务能力 是一种功能 可发现一个或多个已命名的 FIDL 服务 实例。服务功能由 一 渠道 Directory协议 其中,目录中的每个条目都公开一个已命名的服务实例

library fuchsia.examples;

const MAX_STRING_LENGTH uint64 = 32;

@discoverable
protocol Echo {
    EchoString(struct {
        value string:MAX_STRING_LENGTH;
    }) -> (struct {
        response string:MAX_STRING_LENGTH;
    });
    SendString(struct {
        value string:MAX_STRING_LENGTH;
    });
    -> OnString(struct {
        response string:MAX_STRING_LENGTH;
    });
};

service EchoService {
    regular_echo client_end:Echo;
    reversed_echo client_end:Echo;
};

使用 传出目录 从另一个 组件的 命名空间 ,了解所有最新动态。

服务实例

一项服务的多个已命名实例可由单个组件托管。 这些格式会显示在 命名空间 的 组件指定为该 Service 的子目录。 组件框架可为每个 Pod 生成任意且唯一的标识符 。

例如,如果框架生成 57dfe118a2a8 作为 fuchsia.examples.EchoService 服务,使用方组件可以 该实例使用以下命名空间路径中的协议:

  • /svc/fuchsia.examples.EchoService/57dfe118a2a8/regular_echo
  • /svc/fuchsia.examples.EchoService/57dfe118a2a8/reversed_echo

提供服务功能

要提供服务功能,组件必须声明相应功能, 从 self 路由。该组件用于托管 其 传出目录 ,了解所有最新动态。

如需定义该 capability,请为其添加 capabilities 声明:

{
    capabilities: [
        {
            service: "fuchsia.example.ExampleService",
        },
    ],
}

这定义了一个由此组件托管的功能,其传出目录路径 为 /svc/fuchsia.example.ExampleService。您还可以自定义路径:

{
    capabilities: [
        {
            service: "fuchsia.example.ExampleService",
            path: "/my_svc/fuchsia.example.MyExampleService",
        },
    ],
}

路由服务功能

组件通过将服务功能公开给其 提供给子女。

如需详细了解该框架如何路由组件功能, 请参阅功能路由

曝光

公开某项服务功能可让组件的父级访问该服务功能 功能:

{
    expose: [
        {
            service: "fuchsia.example.ExampleService",
            from: "self",
        },
    ],
}

from: "self" 指令表示服务功能 由此组件提供。

动态合集

服务 capability 可以从动态集合中公开:

{
    collections: [
        {
            name: "coll",
            durability: "transient",
        },
    ],
    expose: [
        {
            service: "fuchsia.example.ExampleService",
            from: "#coll",
        },
    ],
}

成为协作者

提供服务功能可让子组件访问该服务功能 功能:

{
    offer: [
        {
            service: "fuchsia.example.ExampleService",
            from: "self",
            to: [ "#child-a", "#child_b" ],
        },
    ],
}

使用服务功能

要使用服务功能,组件必须请求该功能, 在其 命名空间 ,了解所有最新动态。

如需请求该功能,请为其添加 use 声明:

{
    use: [
        {
            service: "fuchsia.example.ExampleService",
        },
    ],
}

这将填充组件命名空间中已知路径下的服务 /svc/fuchsia.example.ExampleService。您还可以自定义路径:

{
    use: [
        {
            service: "fuchsia.example.ExampleService",
            path: "/my_svc/fuchsia.example.MyExampleService",
        },
    ],
}

有关待处理请求的详细信息,请参阅 开放协议的生命周期