我们是否应该在可选protobuf字段中设置默认值,以最小化通过有线发送的数据?
我想最小化通过网络发送的消息字节大小。为了实现这一点,我可以想到的一个优化是:
if( message->my_optional_field() != value )
message->set_my_optional_field(value);
这可以防止has_my_optional_field()
在预期值等于默认值时被调用,从而防止该字段出现在序列化数组中。这是一个好的做法吗?Pro buf是否提供了这样的开箱即用的东西?
这个问题类似于protobuf中的\u field()方法如何与默认值相关?事实上,它已经在对公认答案的一条评论中得到了回答。然而,随后的评论对这一说法提出了质疑。
不知道这是否有用,但如果使用以下选项,则可以有效地了解其是否已设置,因此如果发送的值是默认值,则可以输出它,因为它可以判断它是否已设置为数据类型。
oneof oneofname{
int32 variablename = 2;/* the number is the field position within the existing message your declaring the oneof./*
}
行为不同于协议2和协议3。
在协议2中,存在的概念与默认值的概念是分开的。在协议2中,将字段设置为默认值与清除字段不同;即使它是默认值,该值也会通过网络发送。在协议2中,为了“取消设置”字段,您必须调用clear_my_optional_field()
;然后它不会在网上发送。协议3还有单独的has_my_optional_field()
方法来检查是否设置了字段。
在协议3下,“存在”的概念已经被删除。相反,当且仅当字段未设置为默认值时,才会发送字段。clear_
方法与设置为默认值相同。has_
方法不再存在。此外,协议3取消了可配置默认值的概念——所有字段的默认值都是0或空。
例外:对于消息类型字段,proto3中的行为没有更改。这些领域仍然存在着存在的概念。
行动时刻 - 设置变量的默认值 我们并不总是确定变量是否存在。 Unlang为我们提供了语法,以便在变量不存在时指定默认值。 我们将再次通过修改上一个练习来证明这一点。 我们将使用radtest首先在请求中包含Framed-Protocol = PPP,并将其排除在外。 如果Framed-Protocol AVP不存在,我们将返回一个默认字符串。 编辑FreeRADIUS配置目录下的sites-a
问题内容: 所以我正在使用node.js和socket.io。我有这个小程序,它接受文本框的内容并将其发送到node.js服务器。然后,服务器将其中继回其他连接的客户端。有点像聊天服务,但不完全是。 无论如何,如果用户键入价值2-10k的文本并尝试发送该文本,该怎么办?我知道我可以自己尝试一下,但是我正在寻找一个实用的最佳实践限制,即我可以通过一次发射处理多少数据。 问题答案: Node和sock
我在表中为某些列设置了默认值。例如,create_time我已经设置了CURRENT_TIMESTAMP。当我通过JPA插入一个对象时,我没有得到该列的默认值。是否有任何命令可以执行此操作?
问题内容: 我似乎找不到或编写一个选择默认值的sqlquery (我不认为我可以在phpmyadmin中生成它供我复制) 我试图选择它,就好像它是一条记录,但无济于事… 问题答案: 或者我认为更好: 更新-更正 正如@Jeff Caron所指出的,只有在中至少有1行时,上述内容才有效。如果即使分组表没有行也要得到结果,则可以使用以下命令:
问题内容: 有没有一种简单的方法可以为文本表单字段设置默认值? 问题答案: 可以在创建过程中轻松使用:
问题内容: 是否可以为可选的通用参数提供默认值? 我正在尝试做这样的事情: 但我说错了 这只是我试图做的不可能的事吗? 问题答案: 用您完成的方式是不可能的。仅考虑上述代码,什么是类型?就像它说的那样,编译器无法弄清楚(我也不能,因为数据不存在,我也不能。) 特定问题的解决方案是重载而不是使用默认值: 但这引发了您在这里做什么的问题。您会认为应该如此。否则,您在做什么?如果不诉诸(您应该强烈避免)