答
服务能力
是一种功能
可发现一个或多个已命名的
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",
},
],
}
动态合集
服务 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",
},
],
}
有关待处理请求的详细信息,请参阅 开放协议的生命周期