首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用ProtocolBuffer实现网络协议二进制格式

客户端在向服务器发起请求时会根据协议创建二进制数据块,然后依托tcp, udp, http等协议将二进制内容传递给服务器,后者根据协议的规则按照特定次序从接收到的二进制内存块中读取给定字段。...当协议中的字段增多时,这些格式的解析耗时较长,我个人觉得这些格式存在一个不好使之处在于他们在发送二进制数据上。...当协议字段对应字符串或是int这类长度较短的二进制数据时,他们的使用很方便,但如果使用他们传递图片内容能长度较长的二进制数据,那么我们需要进行base64编码后才方便将数据存储在这些格式中。...前面强调过string name=1;后面的”=1“不是赋值,它是的作用是标签,我们可以认为这些数值是字段的牌号,在编译成二进制内容后protocol buffer知道如何去读取这些字段。...图6 protoc生成代码 接下来我们看看如何使用代码来读取或生成proto协议文件规定的数据结构。

76810
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    如何利用 Netty 实现自定义协议通信?

    既然是网络编程,自然离不开通信协议,应用层之间通信需要实现各种各样的网络协议。在项目开发的过程中,我们就需要去构建满足自己业务场景的应用层协议。...之前我们介绍了如何使用网络协议解决 TCP 拆包/粘包的底层问题,这次我们将在此基础上继续讨论如何设计一个高效、可扩展、易维护的自定义通信协议,以及如何使用 Netty 实现自定义通信协议。...通信协议设计 所谓协议,就是通信双方事先商量好的接口暗语,在 TCP 网络编程中,发送方和接收方的数据包格式都是二进制,发送方将对象转化成二进制流发送给接收方,接收方获得二进制数据后需要知道如何解析成对象...扩展性:自定义的协议相比通用协议更好扩展,可以更好地满足自己的业务需求。 安全性:通用协议是公开的,很多漏洞已经很多被黑客攻破。...自定义协议更加安全,因为黑客需要先破解你的协议内容 那么如何设计自定义的通信协议呢?这个答案见仁见智,但是设计通信协议有经验方法可循。

    1.1K40

    SwiftUI:自定义 Shape 使用 InsettableShape 协议实现向内绘制边框

    您在这里看到的是SwiftUI在形状周围绘制边框的方式的副作用。如果您递给某人一个圆的铅笔轮廓,并要求他们用粗笔在该圆上画线,他们将绘制出该圆的精确线——大约一半的笔在该线的内部,一半在该线的外部。...:我们的所有边框都是可见的,因为Swift在圆的内部绘制而不是将圆作为绘制的中心。...SwiftUI的Circle和我们的Arc之间有一个微小但重要的区别:两者均符合Shape协议,但Circle也符合名为InsettableShape的第二种协议。...添加到inset允许我们在需要时多次调用inset(by :),例如,如果我们想手动调用一次,则使用strokeBorder()。...,这在圆弧的情况下意味着我们应使用它减小绘制半径。

    1.8K40

    Logback中如何自定义灵活的日志过滤规则

    ,用户可以根据需要来配置一些简单的过滤规则,下面先简单介绍一下这两个原生的基础过滤器。...当我们要设置多个不同级别的日志策略的时候,如果仅依靠这个过滤器,我们就要级联的定义多个filter来控制才能实现,显然不是很方便,所以此时我们就可以使用 ch.qos.logback.classic.filter.ThresholdFilter...,但是可能还是会出现一些特殊情况,需要自定义复杂的过滤规则,比如想过滤掉一些框架中的日志,通过自带的几个过滤器已经无法完全控制,并且也不希望修改框架源码来实现。...这个时候,我们就可以自己来实现过滤器,并配置使用。实现的方式也很简单,只需要实现Logback提供的 ch.qos.logback.core.filter.Filter接口即可。...在编写好自己的过滤器实现之后,只需要在Appender中配置使用就能实现自己需要的灵活过滤规则了: <appender name="WARN_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender

    2.3K20

    使用Linkerd实现流量管理:学习如何使用Linkerd的路由规则来实现流量的动态控制

    在这篇文章中,我将为大家详细展示如何使用Linkerd的路由规则来实现流量的动态控制,从而提高应用的可用性和灵活性。...对于关心服务网格、流量控制和Linkerd的 技术 的朋友们,这篇文章将带给你前所未有的启示! 引言 在微服务架构中,如何确保流量的平稳、安全和高效传输,是每个开发者和运维人员都关心的问题。...Linkerd的流量管理功能 Linkerd提供了丰富的流量管理功能,帮助我们实现动态的路由和流量控制。 2.1 路由规则 使用Linkerd,我们可以轻松定义路由规则,实现请求的动态路由。...Linkerd的流量分担 使用Linkerd,我们可以实现流量的动态分担,提高应用的可用性。 3.1 使用权重进行流量分担 Linkerd允许我们根据权重分配流量,确保服务的平稳运行。...通过使用Linkerd的路由规则和流量控制工具,我们可以确保微服务的平稳、安全和高效运行。随着云原生技术的发展,我们期待Linkerd将为我们带来更多的创新和价值。

    17810

    解释器模式实战:实现自定义的告警规则功能

    先来看一个需求: 在告警系统中,有很多规则的配置,如果配置的规则被触发,监控系统就通过短信、微信、邮件等方式发送告警给开发者。...为了简化代码实现,我们假设自定义的告警规则只包含“||、&&、>、、的优先级高于“||、&&”运算符,“&&”运算符优先级高于“||”。...除此之外,用户可以自定义要监控的 key,比如前面的 api_error_per_minute、api_count_per_minute。 那么如何写代码实现呢?...这里的语言并不是我们说的中文和英文,而是任意一个信息的载体,比如本文中的告警规则。...比如说: 需要解释的字符串可以表示为一个抽象的语法树 一个重复出现的问题可以用一种简单的语言来表达 现在比较流行的规则引擎系统

    67220

    JMeter 扩展插件实现对自定义协议的支持

    前言我们已经在前文中介绍了如何使用 JMeter 的 Java Sampler 扩展机制轻松实现对新协议的支持。...Java Sampler 方式的优点在于实现快速,只需关注协议的逻辑部分即可;但缺点是只能以参数的方式进行互动,界面可用性不高,主要用于待测试协议的原型开发。...,介绍如何实现更完善的新协议插件。...图片JMeter 扩展实现步骤1:准备开发环境前方已经介绍过如何准备开发环境,请参考 JMeter 扩展开发:自定义函数 创建 Maven 项目。...如果对界面的要求不高,并且通过传参的方式可以完成与 Sampler 的交互,那么使用前文 JMeter 自定义协议扩展之 Java Sampler 介绍的方法扩展 Java Sampler 会是更简单的一种方式

    62520

    SQL审核 | SQLE 如何开发一条自定义的规则

    本次来分享的是如何开发一条自定义的review rule 的规则(基于 MySQL 5.7 的语法)。...下面我们要代码的角度追踪一下这个审计的整个流程:SQLE 采用的是类似数据库driver插件的开发模式,接口 driver.go 已经定义好了抽象的函数,具体的实现需要每一种具体的数据库来完成 例如 mysql.go..., oracle.go 下面是如何添加一条新的rule 到审核平台的具体步骤: New Rule的规则是: 我们想要在新建的TABLE 表中必须含有指定的列, 像是cdate cdate,creator...: 我们把这条新的规则追加到我们自定义的规则模板中: 最后一步,提交规则的模板信息。...null, name varchar(20)); 点击审核按钮 我们可以看到我们自定义的审核规则已经生效: 最后我们来看看后台代码是如何开发实现这个规则的: 后台对应的这条规则的逻辑代码是:(入门级别的简单代码

    31330

    SQL审核 | SQLE 如何开发一条自定义的规则

    本次来分享的是如何开发一条自定义的review rule 的规则(基于MySQL 5.7的语法)。...mysql.go, oracle.go [Image%20%5B3%5D.png] 下面是如何添加一条新的rule 到审核平台的具体步骤: New Rule的规则是: 我们想要在新建的TABLE...: [Image%20%5B4%5D.png] 我们把这条新的规则追加到我们自定义的规则模板中: [Image%20%5B5%5D.png] 最后一步,提交规则的模板信息。...table test (id int not null, name varchar(20)); 点击审核按钮 [Image%20%5B7%5D.png] 我们可以看到我们自定义的审核规则已经生效: [...Image%20%5B8%5D.png] 最后我们来看看后台代码是如何开发实现这个规则的: 后台对应的这条规则的逻辑代码是:(入门级别的简单代码)这段代码加入到 sqle/driver/mysql/rule

    55930

    如何实现高速卷积?深度学习库使用了这些「黑魔法」

    来源:公众号 机器之心 授权转载 使用深度学习库可以大幅加速CNN模型运行,那么这些库中的哪些具体的做法实现了这种高速度和高性能呢?...而当我自己做了一个简单的卷积层实现,发现这一个层的运行时间竟然超过2秒时,我非常震惊。 大家都知道,现代深度学习库对大部分运算具备高度优化的生产级实现。但是这些库使用了哪些人类不具备的「黑魔法」呢?...它们如何将性能提升100倍?当它们「优化」或加速神经网络运算时,它们在做什么?当谈及高性能/高效DNN时,我常常问(或被问及)这些问题。 本文尝试介绍在DNN库中如何实现一个卷积层。...如果要抵消im2col变换带来的额外工作和内存,我们需要一些加速。接下来我们来看这些库是如何实现此类加速的。本文还介绍了在系统级别进行优化时的一些通用方法。...但是,对于特定的常用规模、不同的架构(GPU)和不同的运算参数(如扩张、分组等),专门化(specialization)是关键。这些库可能也有更专门化的实现,这些实现利用类似的trick或具体的假设。

    1K30

    如何使用yaraQA提升Yara规则的质量和性能

    关于yaraQA yaraQA是一款功能强大的Yara规则分析工具,在该工具的帮助下,广大研究人员可以轻松提升Yara规则的质量和性能。...很多Yara规则可能在语法上是正确的,但功能很可能仍然存在问题。而yaraQA则会试图找到这些问题并将其报告给YARA规则集的开发者或维护者。...yaraQA的功能 yaraQA会尝试检测下列问题: 1、语法正确,但由于条件中的错误,从而导致不匹配的规则; 2、使用可能错误的字符串和修饰符组合的规则(例如$ = "\\Debug\\" fullword...屏蔽与性能相关的规则问题 --debug 调试模式输出 工具使用样例 python3 yaraQA.py -d ....项目专门提供了包含问题的规则样例,可以在.

    19710

    如何使用 TIMSDK 的自定义字段?

    前言介绍 为了方便不同用户的定制化及业务需求,IMSDK 目前提供了五个维度的自定义字段 "用户资料自定义字段","好友自定义字段","群成员维度自定义字段","群维度自定义字段" 均已键值对 Key-Value...形式存储并使用。...扩展相应的字段 Key,为相应的字段 Key 设置值 Value,这便是 IMSDK 字段的使用方式 "消息自定义字段" 有些不一样,请翻至对应的章节详阅 控制台添加自定义字段 1)进入控制台打开 "...() 获取自定义字段的键值对; 适用场景 添加好友成功后,可以对好友进行备注,标记好友来源等字段可供使用,某些特殊场景下需要用到自定义字段,例如:星标好友,好友亲密度等一些场景 示例代码 写自定义字段...-> 返回设置的 int 或字符串; 适用场景 消息的自定义字段信息有两种,例如 Int 可以像微信一样标记语音消息是否播放过,0 为未播放,显示红点,1 为播放过了,不显示红点。

    2.6K61

    手把手教你实现自定义的应用层协议

    实现自己的应用功能时,已知的知名协议(http,smtp,ftp等)在安全性、可扩展性等方面不能满足需求,从而需要设计并实现自己的应用层协议。...2.协议分类 2.1按编码方式 二进制协议 比如网络通信运输层中的tcp协议。 明文的文本协议 比如应用层的http、redis协议。 混合协议(二进制+明文) 比如苹果公司早期的APNs推送协议。...容易兼容的 向前兼容,对于旧协议发出的报文,能使用新协议进行解析,只是新协议支持的新功能不能使用。 向后兼容,对于新协议发出的报文,能使用旧协议进行解析,只是新协议支持的新功能不能使用。...协议可视化图 6.2 协议实现 talk is easy,just code it,使用c/c++语言来实现。...myProtoMsgPrint(*pMsg); myDecode.pop(); } return 0; } 7.2运行测试 8.总结 不到350行的代码向我们展示了一个自定义的应用层协议该如何实现

    64460

    一分钟读懂如何配置 EdgeOne 的自定义规则

    您可以使用精准匹配规则中的客户端 IP 匹配和请求 URL 匹配组合来实现。...说明:单击更多配置,可修改该规则的优先级,数值越低,优先级越高。5. 单击确定后,规则将部署生效。相关参考支持的匹配条件范围自定义规则可以使用匹配条件来控制规则的适用范围。...扩展头部网络层协议应用层协议支持的处置方式不同的自定义防护规则支持的处置方式如下,不同的处置方式说明请参见 处置方式。...使用返回自定义页面处置方式:您可以为单条自定义规则(仅支持精准匹配规则)配置返回自定义页面处置方式。...响应匹配该条规则的请求时,EdgeOne 将返回您指定的页面和状态吗。使用自定义页面:您可以使用自定义页面配置,指定全部自定义规则在拦截请求时使用的页面和状态码。

    40731

    如何使用PLC自带功能实现不同厂家PLC之间的协议的解析及转达

    以往经常使用的方式是采用安装第三方或厂家自带的协议转换模块。类似于给设备安装不同的翻译器。这时候会增加很多成本,让预算紧张的项目雪上加霜。...这时,有一个不成熟的想法在脑海中成型,既然物理口一样,要么是RS485,要么RJ45,要么CAN等,那我们是不是可以利用自带的功能,实现协议的相互认识?...说干就干,接下来,让我们以Modbus为例,理解如何使用PLC自带功能实现不同厂家PLC之间的协议的解析及转达。...由于其免费公开发行,使用该协议的厂家无需缴纳任何费用,Modbus通信协议采用的是主从通信模式(即Master/Slave通信模式),其在分散控制方面应用极其广泛,从而使得Modbus协议在全球得到了广泛的应用...数据发送到Socket 以上是实例是根据RA官网提供的Demo程序进行讲解如何使用 AB ControlLogix及CompactLogix系列PLC通过Socket方式进行Modbus TCP协议编写

    1.5K40

    基于 Kotlin + Netty 实现一个简单的 TCP 自定义协议

    开发背景 我们的项目需要开发一款智能硬件。它由 Web 后台发送指令到一款桌面端应用程序,再由桌面程序来控制不同的硬件设备实现业务上的操作。...自定义通讯协议 首先,需要设计一个通用的 TCP 网络协议。...版本号:1字节,仅表示协议的版本号,便于协议升级时使用 序列化方式:1字节,表示如何将 Java 对象转化为二进制数据,以及如何反序列化。...) */ const val LOGIN: Byte = 1 ...... } } 由于使用自定义的协议,必须要有对报文的 encode、decode...接收到 Web 端的指令后,通过 Guava 的 EventBus 将指令通过 TCP 发送给各个设备,发送时需要转化成对应的 Packet。因此,核心的模块就是这个 TCP 自定义的协议。

    1.8K10
    领券