• Python——gRPC详解及实战避坑方案(上)

    👆 “Python猫” ,一个值得加星标的公众号作者:henry_czh(授权转载,勿二次转载)来源:https://juejin.im/post/6854573212018147336前言什么是RPC服务 RPC,是Remote Procedure Call的简称,翻译成中文就是远程过程调用。RPC就是允许程序调用另一个地址空间(通常是另一台机器上)的类方法或函数的一种服务。它是一种架设在计算机网络之上并隐藏底层网络技术,可以像调用本地服务一样调用远端程序,在编码代价不高的情况下提升吞吐的能力。为什么要使...
  • 开发一个 IM App 需要会多少知识点?

    本文作者作者:FreddyChen链接:https://juejin.im/post/5f0ecbf15188252e937bf371本文由作者授权发布。本文作者是我见过对文章极度负责的作者之一了,在开始这个系列之前,就跟我简单聊了下,IM 也算是一类热门项目了,作者会分 13 篇详尽的介绍整个 IM 项目,最终也会开源项目,希望大家可以学的开心。终于可以开始写这个系列的文章了,本系列文章预计将分为13篇,由于IM涉及的知识点稍复杂,所以每个知识点都会单独用一篇文章来阐述,尽量讲透彻,方便大家理解。  1灵...
  • protobuf 为经络,gRPC为骨架

    然而 protobuf 之类的工具让原本就比较分散的数据结构变得更加分散 — 现在网络层/协议层都用 protobuf 来定义数据结构,而业务层/应用层使用编程语言原生的支持来定义数据结构,项目一大,维护起来还是会很头疼。我自己在不断实践中,尤其是在 rust 的实践中,逐渐摸索出来一套以 protobuf 为主的数据结构定义方式,即在一个项目开始时,先集中精力用 protobuf 定义项目中所有可以被 protobuf 支持的简单类型定义的数据结构。
  • 序列化:ProtoBuf与JSON的比较

    什么是结构化数据呢,正如字面上表达的,就是带有一定结构的数据。比如电话簿上有很多记录数据,每条记录包含姓名、ID、邮件、电话等,这种结构重复出现。同类XML、JSON 也可以用来存储此类结构化数据,但是使用ProtoBuf表示的数据能更加高效,并且将数据压缩得更小。原理ProtoBuf 是通过ProtoBuf编译器将与编程语言无关的特有的 .proto 后缀的数据结构文件编译成各个编程语言专用的类文件,然后通过Google提供的各个编程语言的支持库lib即可调用API。
  • 当前疫情下火爆的直播应用,你了解背后的技术架构吗?

    回顾直播行业的发展历程,直播类应用在各个领域遍地开花,那么它背后的技术架构你是否了解?两年前,我参与了一个支持100万用户同时在线、20万并发的直播答题系统的架构设计,下文将以『直播答题』的应用场景为例,带你了解当前疫情下火爆的直播应用背后的技术架构。03技术选型及依据一.音视频处理及传输的方案选型音视频处理及传输,因为技术团队不具备这方面的能力,所以当时调研了各种云厂商的付费解决方案,最终采用了腾讯云的直播解决方案。
  • APP爬虫之-Protobuf协议逆向解析

    比如一个 APP 的 Response 原先是以 json 格式返回的:这样很容易被解析,用Protobuf把上面数据序列化再传输就变成类似这样:这张图片只是样例这样就没法直接解析数据,如果了解 Protobuf 协议的话就能加快反解速度。所以还得从头来聊 Protobuf 。Protobuf 是 Google 开发的一套数据存储传输协议,跟 xml 和 json 一样的,都是用来储存和传输数据的。不了解 Protobuf 协议语法和用法的话也无法反解数据。下载一个 Protobuf 编译器和一个调用编译器的接口程序,我们这里用Python版的。Python编辑器里运行 import google.protobuf 可以检测是否安装成功。上述过程就是一个完整的正向数据 protobuf 序列化过程。
  • Protobuf设计模式

    我正在评估基于Java的服务的Google协议缓冲区(但希望使用与语言无关的模式)。我有两个问题: 首先是一个广泛的一般性问题: 我们看到人们使用什么模式?所述模式与类组织(例如,每个.proto文件,打包和分发的消息)和消息定义(例如,重复字段与重复封装字段*)等有关。 在Google Protobuf帮助页面和公共博客上,此类信息很少,而对于诸如XML之类的已建立协议,则有大量信息。 对于以下两种不同的模式,我也有特定的问题: Represent messages in .proto files, p...
  • JSON或协议缓冲区以替换自定义TCP消息

    最初,我们有两个与TCP / IP进行通信的应用程序,并且它们都是由C ++实现的。它们之间的消息是自定义消息类型。 Now the client program will be changed to web application based on nodejs and the communication between them will be changed to message bus such as rabbitmq 因此,它们之间的消息类型应该更改。 JSON comes to my mind ...
  • 将protobuf转换为json以将其发送到Web服务器是否合理?

    Protobuf是一件好事,它允许c ++开发人员不必理会类的序列化/反序列化,快速且.proto格式非常好。它还允许自动数据验证。但是这些消息不是人类可读的,最重要的是人类无法制造。当您需要快速测试对远程服务器对特定刺激的响应时,这是一个问题。 在我看来,解决方案是制作protobuf消息,通过某个库将其转换为json并发送,然后使用同一库将其反序列化为服务器上的protobuf,然后再返回c ++。 似乎我们两全其美:消息​​验证,.proto文件自动生成类以及json的可读性。当然,它的速度较慢,但​...
  • Websocket上的任意protobuf消息为字节数组-如何预先确定实际消息类型

    Protobuf不错,花花公子,但并不是出于自我描述。现在,如果您使用定义明确的协议并希望替换例如,这完全可以。 SOAP消息,或者只想替换一个宁静的JSON API等。 但是我想在Websocket上使用它,而不是关闭并在不同的URL下一次又一次地重新打开它(这违背了websocket的观点),我想保持它的打开状态并通过Byte作为字节通过电线发送不同的消息-阵列! 现在我的问题很简单,但要解决的有点复杂。我想从客户端向服务器发送任意消息(反之亦然),接收者应该简单地确定收到的消息类型以及如何解释它。 用...
  • 对ETL管道进行反向工程

    我在Scala中有一个单向大型ETL管道,我从protobuf模式A开始,到protobuf模式B结束。我想在模式A和模式B的字段之间创建多对多映射,其中模式B使用模式A中字段的子集。ETL很复杂,并且有很多转换,其中信息存储在变量中,然后以各种方式转换,然后再输出到模式B。我到目前为止已经尝试过: 取一个数据,该数据由模式A的完全填充的集合组成,其值作为“标志”,通过ETL运行它,并分析模式B的输出以使这些标志匹配。这不考虑值的转换,在某些输入约束下失败,并且您无法将此类“标志”附加到布尔值或枚举字段的...
  • 在微服务架构中使用外部API

    我正在编写一个基于微服务的小型应用程序。其中一项服务的任务是查询外部API和处理JSON响应(房屋的过滤列表)。由于我正在使用协议缓冲区来序列化将发送到消息代理的消息,因此我需要将JSON输出转换为适当的协议缓冲区格式。 这是说明整体架构的图: 问题在于,由于JSON响应较长,分页并且还具有许多嵌套字段,因此没有简单的方法来手动创建相应的ProtoBuff消息结构。 我可能会以文本字符串形式发送JSON响应,并在数据库服务端进行处理,但这随后带来了如何在数据库中存储每个房屋对象以便稍后查询的问题。 将整个...
  • 我可以为protobuf生成的结构添加新功能吗

    我正在使用protobuf定义来定义消息类型。 结构看起来像 message1 { } message2 { bytes msg1 = 1 } 因此message2具有一个字段,该字段是message1的字节数组表示形式。我是: 创建一个msg1结构实例 序列化它 加密在步骤2中获得的字节数组 在步骤3中生成的密码上计算数字签名 我想看看是否有可能为protobuf message1添加一个函数,该函数将返回序列化的message1。
  • 用于以多种语言生成给定数据格式的模型,解析器和序列化器的选项?

    我是Apache PLC4X(孵化)项目的成员。在这里,我们目前正在实施多种工业PLC协议。当我们最初专注于创建这些版本的Java版本时,我们目前开始致力于提供C ++和其他语言。 与其手动同步和维护这些协议,不如以一种通用的方式定义这些协议的消息结构,并根据这些定义生成模型,解析器和序列化器。 我研究了几种选择:1)Protobuf 2)节俭3)DFDL 这些问题如下: 1)Protobuf似乎是设计模型并从中生成模型,序列化器和解析器的理想选择。使用Protobuf,可以轻松定义模型并确保可以序列化对象...
  • 如何处理为gRPC API添加新字段/部分数据更新?

    假设我们有以下消息将用于更新数据,并且它刚刚更新到版本2。 message HelloRequest { string name = 1; // version 1 bool is_valid = 2; // version 2 } 现在假设我们以如下方式更新了我们的应用程序: 服务器:版本2 客户A:版本2 客户端B:版本1 We don't have any problems with client A since it can set the proper is_valid value...
公告

《从零开始开发BBS》课程上线啦,快来跟着我一步步搭建属于你的BBS吧。

课程地址:https://www.shiyanlou.com/courses/1436
9折优惠邀请码: ZHwfIjb1

该课程会带领大家一步步的了解并熟悉Go语言开发,如果你是一个Go语言初学者,或者正准备学习Go语言,那么这个课程非常适合你。如果你熟练掌握了本课程中的知识点,相信你就已经入门Go语言开发,并能胜任日常的开发工作了。