当前位置: 首页 > 知识库问答 >
问题:

Dart RPC:使用协议缓冲区序列化而不是JSON

冀望
2023-03-14

默认情况下,Dart-RPC在服务器和客户端之间传输对象(类实例)时使用JSON序列化。

如何使用Protobuf(协议缓冲区)序列化
是否可以使用“接受”请求标头指定序列化方法(如内容类型)?

这是我尝试的,

我使用了以下. proto定义文件,表示Person实体:

message Person {
  required string name = 1;
  required int32 id = 2;
  optional string email = 3;
}

生成了人。pb。dart对于我来说,使用protoc gen dart插件,通过运行以下命令:

protoc person.proto --dart_out=. --plugin ./protoc-gen-dart

还有一些样板dart rpc代码:

import 'dart:io';
import 'package:rpc/rpc.dart';
import 'person.pb.dart';

const String _API_PREFIX = '/api';
final ApiServer _apiServer =
new ApiServer(apiPrefix: _API_PREFIX, prettyPrint: true);

main() async {
  _apiServer.addApi(new Cloud());
  _apiServer.enableDiscoveryApi();

  HttpServer server = await HttpServer.bind(InternetAddress.ANY_IP_V4, 8080);
  server.listen(_apiServer.httpRequestHandler);
}

@ApiClass(version: 'v1')
class Cloud {
  @ApiMethod(method: 'GET', path: 'resource/{name}')
  Person getResource(String name) {

    Person p = new Person()
      ..id = 1
      ..name = name
      ..email = 'a@a.a';

    return p; // ??? p.writeToBuffer(); ???
  }
}

打开功能请求:https://github.com/dart-lang/rpc/issues/62

共有1个答案

马业
2023-03-14

rpc只支持JSON。您可以在GitHub存储库中创建功能请求。

 类似资料:
  • 这就是我想要实现的: > 在Proc#1中使用google协议缓冲区建模对象 使用proto-buf序列化该对象,并将其发送到posix消息队列。 在Proc#2中读取流并将其反序列化为类似的模型,同时使用协议缓冲区。 换句话说: 进程1中的对象-- 问题是Proc#1和Proc#2可能是完全不同的语言平台。程序#1通常是C与g相一致的。但是Proc#2可以是任何东西:Python、Java等等。

  • 我有kafka集群接收消息。消息是一个字节数组的zip文件。zip文件包含二进制的原型数据文件作为条目。我正在读取zip文件,并试图反序列化的原型条目,这就是我的代码是打异常。 在将二进制protobuf文件作为压缩字节数组发送到代理之前,我能够对其进行反序列化。 但是,当我压缩这些二进制protobuf文件,向kafka生成消息,使用它,然后尝试反序列化zip流中的条目时,我面临着一些问题。 我

  • 是否有可能在C中序列化一个类,并使用协议缓冲区将其反序列化为C#中的类似类?我已经尝试过Json序列化来克服不同平台中的序列化问题,但它在一些数据类型上存在问题,如数组列表等。那么关于使用谷歌协议缓冲区有什么建议吗?

  • 问题内容: 对于某些缓存,我正在考虑为即将到来的项目做准备,我一直在考虑Java序列化。即,应该使用它吗? 现在,由于几年来的各种原因,我以前已经编写了自定义序列化和反序列化(可外部化)。如今,互操作性已成为一个更大的问题,并且我可以预见需要与.Net应用程序进行交互,因此我考虑使用独立于平台的解决方案。 有没有人对GPB的高性能使用有任何经验?与Java的本机序列化相比,它在速度和效率方面有何不

  • 我们接近100人。proto文件,其中每个文件可以定义大约10个IDL结构(如服务或消息)。 有没有一种方法可以可视化它们,包括引用(从一个文件到另一个文件)。例如类似于UML类图。 可能有可配置的可视化Java /C。 引用自https://developers.google.com/protocol-buffers/docs/overview 协议缓冲区现在是谷歌的通用数据语言——在撰写本文时

  • 据我所知,协议缓冲区主要用于控制服务器和客户端代码的项目。我的一般问题是——协议缓冲区能否用于将二进制消息序列化/反序列化到使用现有协议的服务器?所以,我的问题: > 如果协议缓冲区不支持本机微调现有协议的序列化/反序列化方式,那么可以通过扩展添加该功能吗?是否可以以某种方式添加序列化/反序列化方法可以识别的关键字?也许这可以通过扩展或修改protobuf csharp port或protobuf