我试图在Typescript中设置一个节点gRPC服务器,我已经让一切正常,但处理请求/响应的冗长让我感觉不好。我遵循了https://github.com/blokur/grpc-ts-demo这似乎是许多示例项目的设置方式。
处理请求或响应时会出现问题,而创建的代码生成工具(grpc_tools_node_protoc
)存根要求您处理如下请求和响应:
async getAllDogs(
call: grpc.ServerWritableStream<Empty, DogEntity>,
): Promise<void> {
const dogs = await dogService.repo.findAll();
dogs
.map((dogObj): DogEntity => {
const dogEntity = new DogEntity();
dogEntity.setBreed(dogObj.breed);
dogEntity.setId(dogObj.id);
dogEntity.setGoodBoyOrGirl(dogObj.goodBoyOrGirl);
return dogEntity;
})
.forEach((dog) => {
call.write(dog);
});
call.end();
}
从grpc_tools_node_protoc
为DogEntity
生成的类型为:
export class DogEntity extends jspb.Message {
getId(): number;
setId(value: number): DogEntity;
getBreed(): string;
setBreed(value: string): DogEntity;
getGoodBoyOrGirl(): boolean;
setGoodBoyOrGirl(value: boolean): DogEntity;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): DogEntity.AsObject;
static toObject(includeInstance: boolean, msg: DogEntity): DogEntity.AsObject;
static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
static serializeBinaryToWriter(message: DogEntity, writer: jspb.BinaryWriter): void;
static deserializeBinary(bytes: Uint8Array): DogEntity;
static deserializeBinaryFromReader(message: DogEntity, reader: jspb.BinaryReader): DogEntity;
}
export namespace DogEntity {
export type AsObject = {
id: number,
breed: string,
goodBoyOrGirl: boolean,
}
}
因此,如果消息有一堆字段,或者如果您必须编写一堆RPC处理程序,那么构建响应(和客户端的请求)可能会变得非常冗长。
我想知道是否有人以一种提供抽象层的方式实现了这一点,从而减少了只需执行一些类似于设置CRUD类型RPCendpoint的操作所需的代码量。
实际上,我最终找到了另一种生成存根代码的方法:https://github.com/stephenh/ts-proto
这个库允许更灵活的类型,尽管它需要原型
直接运行。简而言之,对我来说主要的好处是现在可以像这样创建响应:
async getAllDogs(
call: grpc.ServerWritableStream<Empty, DogEntity>,
): Promise<void> {
const dogs = await dogService.repo.findAll();
dogs.forEach((dog) => {
call.write(DogEntity.fromJSON(dog));
});
call.end();
}
如何获得ec2实例详细信息(如名称、id、类型、区域、体积、平台、ondemand/reserved)和实例价格详细信息。 在cli中使用aws api并将其写成csv文件。 提前谢了。
问题内容: 我正在尝试使用数据库表在Spring应用程序中应用安全性。 到目前为止,我的applicationContext-Security中有: 我对userDetailsService的实现如下所示: 我的汇编程序如下所示: 现在,用户实体为: 我的userentitydao界面是: 实现是: 现在,当我尝试在tomcat上进行部署时,出现以下异常: 而不管我该怎么办,我不知道这是怎么回
所以我有一个名为interestingpoint的类,其中包含变量'name'、'coordines'。我创建了一个包含有趣地点的列表,然后在地图上添加标记,如下所示: 所以主要的问题是,当我点击任何标记时,我可以获得它的细节吗?当我点击标记时,我想显示那个地方的描述和图片。
在当前版本中,您不仅可以查看AssetBundle文件的包含资源信息和依赖关系信息,同时还可以查看每种资源的详细使用信息。目前,UWA资源检测服务对于主流资源的支持如下: 纹理资源 对于纹理资源,UWA可以提供以下重要信息:分辨率、资源格式、内存占用、Mipmap功能是否开启 和 Read/Write是否开启。这些均为影响纹理文件尺寸和内存占用的重要因素。因此,我们将其在此进行详细展示,您可以对每
在概览页面或警报历史记录页面中点击警报以查看其详细信息页面。在“警报详细信息”页面中,你可以查看引发警报的详细信息,将它标记为已读或未读,开启或关闭它,将它分配给成员,添加备注。当你打开此页面时,警报会自动标记为“已读”。 警报详情页面的信息 摘要 它显示警报的当前状态,以及其引发时间和结束时间。 警报详细信息 会显示警报名、警报的解释,以及 Navicat Monitor 的建议以帮助你调查和解
我正在运行一个由20个节点组成的kubernetes群集。命名空间中的一个pod被重新启动。该吊舱因出口代码为137的OOM而死亡,并按预期重新启动。但我想知道pod之前运行的节点。有什么地方可以查一下日志来了解信息吗?像蒂勒,库贝勒,库贝勒等等。。。