元数据3.proto
syntax = "proto3";
import "google/protobuf/descriptor.proto";
package metas3;
message MessageOptionsMetadata3 {
optional string message_options_field1 = 1;
optional string message_options_field2 = 2;
optional string message_options_field3 = 3;
}
extend google.protobuf.MessageOptions {
MessageOptionsMetadata3 message_options_metadata3 = 50000;
}
message FileOptionsMetadata3 {
optional string file_options_field1 = 1;
optional string file_options_field2 = 2;
optional string file_options_field3 = 3;
optional string file_options_field4 = 4;
}
extend google.protobuf.FileOptions {
FileOptionsMetadata3 file_options_metadata3 = 60000;
}
extend google.protobuf.FieldOptions {
repeated string event_type = 70000;
}
my_proto_file.proto
syntax = "proto3";
import "metadata3.proto";
import "google/protobuf/descriptor.proto";
package events;
extend google.protobuf.MessageOptions {
optional string my_option = 51234;
}
message MyMessage {
option (my_option) = "Hello world!";
option (metas3.message_options_metadata3).message_options_field1 = "Message option";
}
生成元数据3\u pb2。py并在protoc插件中使用它,如下所示,
protoc -I=./protos --python_out=./protos_generated --plugin=./protos_generated/metadata3_pb2.py ./protos/*.proto
my\u proto\u file\u pb2。py公司
# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: my_proto_file.proto
"""Generated protocol buffer code."""
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
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
import metadata3_pb2 as metadata3__pb2
from google.protobuf import descriptor_pb2 as google_dot_protobuf_dot_descriptor__pb2
DESCRIPTOR = _descriptor.FileDescriptor(
name='my_proto_file.proto',
package='events',
syntax='proto3',
serialized_options=None,
create_key=_descriptor._internal_create_key,
serialized_pb=b'\n\x13my_proto_file.proto\x12\x06\x65vents\x1a\x0fmetadata3.proto\x1a google/protobuf/descriptor.proto\"1\n\tMyMessage:$\x92\x82\x19\x0cHello world!\x82\xb5\x18\x10\n\x0eMessage option:7\n\tmy_option\x12\x1f.google.protobuf.MessageOptions\x18\xa2\x90\x03 \x01(\t\x88\x01\x01\x62\x06proto3'
,
dependencies=[metadata3__pb2.DESCRIPTOR,google_dot_protobuf_dot_descriptor__pb2.DESCRIPTOR,])
MY_OPTION_FIELD_NUMBER = 51234
my_option = _descriptor.FieldDescriptor(
name='my_option', full_name='events.my_option', index=0,
number=51234, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=b"".decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=True, extension_scope=None,
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key)
_MYMESSAGE = _descriptor.Descriptor(
name='MyMessage',
full_name='events.MyMessage',
filename=None,
file=DESCRIPTOR,
containing_type=None,
create_key=_descriptor._internal_create_key,
fields=[
],
extensions=[
],
nested_types=[],
enum_types=[
],
serialized_options=b'\222\202\031\014Hello world!\202\265\030\020\n\016Message option',
is_extendable=False,
syntax='proto3',
extension_ranges=[],
oneofs=[
],
serialized_start=82,
serialized_end=131,
)
DESCRIPTOR.message_types_by_name['MyMessage'] = _MYMESSAGE
DESCRIPTOR.extensions_by_name['my_option'] = my_option
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
MyMessage = _reflection.GeneratedProtocolMessageType('MyMessage', (_message.Message,), {
'DESCRIPTOR' : _MYMESSAGE,
'__module__' : 'my_proto_file_pb2'
# @@protoc_insertion_point(class_scope:events.MyMessage)
})
_sym_db.RegisterMessage(MyMessage)
google_dot_protobuf_dot_descriptor__pb2.MessageOptions.RegisterExtension(my_option)
_MYMESSAGE._options = None
# @@protoc_insertion_point(module_scope)
访问文件中定义的选项与生成代码中设置的选项相同
value = my_proto_file_pb2.MyMessage.DESCRIPTOR.GetOptions().Extensions[my_proto_file_pb2.my_option]
但从外部proto文件导入的选项似乎未设置,因此无法访问
value = my_proto_file_pb2.MyMessage.DESCRIPTOR.GetOptions().Extensions[my_proto_file_pb2.message_options_field1]
--plugin=./protos_generated/metadata3_pb2.py
我觉得这很奇怪。你认为它应该做什么?
serialized_options=b'\222\202\031\014Hello world!\202\265\030\020\n\016Message option',
看起来您的消息选项也包括在内。所以问题只在于访问它。
value = my_proto_file_pb2.MyMessage.DESCRIPTOR.GetOptions()
.Extensions[my_proto_file_pb2.message_options_field1]
据我所知,没有我的proto\u文件pb2。message\u options\u field1在my\u proto\u文件中定义。协议。相反,它应该是元数据3\u pb2。消息\u选项\u元数据3。
问题内容: 我正在尝试将我的爱好项目之一移植到linux。最好使用Mono,因为它是用C#编写的。但是我也在研究Python。 该应用程序的功能之一是它需要与自定义协议相关联,因此,当用户单击应用程序网站上的链接时,将调用该应用程序: 像这样,这个和这个的定制协议。 在linux / unix系统中怎么做?我可以像Windows中那样关联系统范围的处理程序吗?还是需要依赖于浏览器? 在Google
当然, 这个世界上没有绝对的事情. 所以万一现在所有的路由协议都不能满足你的需求, 那么你可以自己实现你自己的路由协议, 你要做的是, 申明你的路由协议实现了Yaf_Route_Interface接口即可.
本文向大家介绍对python 自定义协议的方法详解,包括了对python 自定义协议的方法详解的使用技巧和注意事项,需要的朋友参考一下 前面说到最近在写python的一些东西,然后和另外一位小伙伴定义了协议,然后昨天我有一部分东西没理解对,昨天上午我自己重写了一遍接收和发送的全部逻辑,昨天下午补了压力测试的脚本,自测没问题之后告知联调的小伙伴。 结果上午还是出了一点问题,然后我们两对代码,他写了一
问题内容: 在Swift中有可能吗?如果没有,那么是否有解决方法? 问题答案: 1.使用默认实现(首选)。 优点 不涉及Objective-C运行时 (至少没有明确 涉及 )。这意味着您可以使其符合结构,枚举和非类。同样,这意味着您可以利用强大的泛型系统。 *当遇到符合此类协议的类型时, *您始终可以确保满足所有要求 。它始终是具体实现或默认实现。这就是“接口”或“合同”在其他语言中的行为方式。
在 Swift 中可能吗?如果没有,那么是否有解决方法可以做到这一点?
我有一个奇怪的错误,我的代表是零,也不知道在哪里检查。也许其他人也有同样的问题。 我有这个类和协议: 在我的VC里 触发计划通知后,我单击它,调用并且不知为何为零,即使已设置委托(打印了来自的消息)。 扩展中的委托方法从未触发,因为委托为nil。 我还在每个类的中打印了一些消息,以查看它是否以某种方式从内存中删除了,但它们没有,只是在我从vc堆栈中弹出它们之后。