标签: protocol-buffers

protobuf-net如何实现可观的性能?

我想了解为什么由Marc Gravell开发的协议缓冲解决方案的速度和它一样快.

我可以理解原始Google解决方案如何实现其性能:它预先生成用于对象序列化的优化代码; 我已经手工编写了一些序列化,并且知道如果避免反射,可以用这种方式编写相当快的代码.但Marc的库是一个运行时解决方案,它使用属性并且不会生成任何生成的代码.那么它是怎样工作的 ?

.net c# reflection protocol-buffers protobuf-net

35
推荐指数
1
解决办法
5091
查看次数

如何在python中按编号获取顶级protobuf枚举值名称?

例如,我有原始文件File.proto:

enum Test {
  ONE = 1;
  TWO = 2;
}
Run Code Online (Sandbox Code Playgroud)

File_pb2.py使用protoc 生成文件File.proto.我想在一个python代码中获取字符串"ONE"(对应于File_pb2.ONE的名称)的值为1(对应于File_pb2.ONE的值)来自生成的文件File_pb2.py而不定义我自己的字典.我怎样才能做到这一点?

python protocol-buffers

35
推荐指数
1
解决办法
3万
查看次数

处理protobuffers中的空值

我正在研究从数据库中获取数据并构造protobuff消息的东西.鉴于可以从数据库中为某些字段提取空值,我将在尝试构造protobuff消息时获得Null指针异常.从线程http://code.google.com/p/protobuf/issues/detail?id=57中的protobuffs中不支持知道null ,我想知道处理NPE的唯一其他方法是抛出是将手动检查插入到与原型相对应的java文件中,如下所示!

message ProtoPerson{
    optional string firstName = 1;
    optional string lastName = 2;
    optional string address1 = 3;
}

ProtoPerson.Builder builder = ProtoPerson.Builder.newBuilder();
if (p.getFirstName() != null) builder.setFirstName(p.getFirstName());
if (p.getLastName() != null) builder.setLastName(p.getLastName());
if (p.getAddress1() != null) builder.setAddress1(p.getAddress1());
...
Run Code Online (Sandbox Code Playgroud)

那么有人可以澄清在protobuff构造期间是否还有其他可行的有效方法来处理空值?

java null protocol-buffers

35
推荐指数
3
解决办法
3万
查看次数

不带参数的Protobuf RPC Service方法

我正在尝试使用Google的Protocol Buffers来描述RPC服务

service WhoamiService {
  rpc WhoAreYou() returns (Whoami) {}
}

message Whoami {
  optional bytes request_id = 1;
  optional string hostname = 2;
  optional string message = 3;
}
Run Code Online (Sandbox Code Playgroud)

当我尝试编译这个定义时,我得到一个Expected type name指向该WhoAreYou()片段的错误.

它工作正常,如果我取代WhoAreYou()WhoAreYou(Whoami),但在这种情况下,该方法不需要任何参数.是有办法做到这一点还是根本不支持?

protocol-buffers protorpc

35
推荐指数
2
解决办法
1万
查看次数

将Spring Boot与gRPC和Protobuf一起使用

有没有任何使用gRPC和Spring Boot的例子或想法的人?

spring protocol-buffers spring-boot grpc

35
推荐指数
3
解决办法
3万
查看次数

ImportError:没有名为google.protobuf的模块

我正在遵循本指南(https://developers.google.com/protocol-buffers/docs/pythontutorial)并使用addressbook.proto的确切示例.

发布编译器生成的addressbook_pb2.py文件的内容.当我运行以下简单程序时,有错误说,找不到google.protobuf,任何想法如何解决这个问题?谢谢.

顺便说一句,在Mac OSX上使用Python 2.7.

from addressbook_pb2 import Person

p = Person()
p.email = "abc"

print p.email
Run Code Online (Sandbox Code Playgroud)

这是自动生成的文件addressbook_pb2.py,

# Generated by the protocol buffer compiler.  DO NOT EDIT!
# source: addressbook.proto

import sys
_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
from google.protobuf import descriptor as _descriptor
from google.protobuf import message as _message
from google.protobuf import reflection as _reflection
from google.protobuf import symbol_database as _symbol_database
from google.protobuf import descriptor_pb2
# @@protoc_insertion_point(imports)

_sym_db = _symbol_database.Default()




DESCRIPTOR = _descriptor.FileDescriptor(
  name='addressbook.proto',
  package='tutorial', …
Run Code Online (Sandbox Code Playgroud)

python protocol-buffers python-2.7

35
推荐指数
7
解决办法
7万
查看次数

协议缓冲区的速度有多快或多快?

.NET协议缓冲区是否比Remoting(SerializationFormat.Binary)更轻/更快?是否会以语言/框架术语为其提供一流的支持?即它是否像Remoting/WebServices一样透明地处理?

c# remoting protocol-buffers

34
推荐指数
2
解决办法
2万
查看次数

协议缓冲区如何处理版本控制?

协议缓冲区如何处理类型版本控制?

例如,当我需要随时间更改类型定义时?喜欢添加和删除字段.

protocol-buffers protobuf-net

34
推荐指数
2
解决办法
2万
查看次数

在.proto文件中使用导入时出错

我尝试使用import语句将名为test1.proto的proto文件导入另一个名为test2.proto的proto文件

import "com/test/test1.proto";
Run Code Online (Sandbox Code Playgroud)

但我得到以下错误

com/test/test1.proto: File not found.
test2.proto: Import "com/test/test1.proto" was not found or had errors.
Run Code Online (Sandbox Code Playgroud)

我试图在很多方面找到导入错误的原因,但不能.那么有人可以告诉我正确的方法进行原型文件导入,以防上述声明出现问题吗?

import protocol-buffers

33
推荐指数
3
解决办法
4万
查看次数

如何在protobuf消息中表示UUID?

我想在我的protobuf用户消息示例中将UUID附加到字段.

message User {
  // field containing id as UUID type
  required string email;
  optional string name;
}
Run Code Online (Sandbox Code Playgroud)

我知道protobuf消息还不支持UUID类型.我已经读过,最好的方法是使用UUID消息类型.

所以我猜我的用户消息将导入我的UUID消息原型定义并将其用作字段类型,如下所示:

import "myproject/UUID.proto";

message User {
  required UUID id;
  required string email;
  optional string name;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,UUID消息将如何显示,以及如何对其进行编码/解码?我的目标是Java/Scala和C#兼容性.

uuid protocol-buffers

31
推荐指数
4
解决办法
2万
查看次数