Protobuf动态解析那些事儿】的更多相关文章

需求背景 在接收到 protobuf 数据之后,如何自动创建具体的 Protobuf Message 对象,再做反序列化.“自动”的意思主要有两个方面:(1)当程序中新增一个 protobuf Message 类型时,这部分代码不需要修改,不需要自己去注册消息类型,不需要重启进程,只需要提供protobuf文件:(2)当protobuf Message修改后,这部分代码不需要修改,不需要自己去注册消息类型,不需要重启进程只需要提供修改后protobuf文件. 技术介绍 Protobuf的入门可以…
最近在做ProtoBuf相关的项目,其中用到了动态解析,网上看了下相关资料和博文都比较少,自己来写一个记录一下学习过程.   Protocol Buffers是结构化数据格式标准,提供序列化和反序列方法,用于存储和交换.语言中立,平台无关.可扩展.目前官方提供了C++.Java.Python API,也有其他语言的开源api(比如php).可通过 .proto文件生成对应语言的类代码 如果已知protobuf内容对应的是哪个类对象,则可以直接使用反序列化方法搞定(Xxx.parseFrom(in…
好久没写博客了,主要是这一年技术没啥长进都打杂了,还有就是生活琐事越来越多,人也越来越懒了…… 之前项目中用到了Protobuf,然后测试发现这玩意不好测,总不能每次定个协议或者改下都要编译Java代码吧.于是我这边写了简单的工具,动态的解析PB文件.效果如下: “选择请求协议”和“选择响应协议”就是选择定义的PB,比如下面这个文件: package perf.pb; option optimize_for = LITE_RUNTIME; message Entry { required str…
在开发中,我非常喜欢动态语言和匿名对象带来的方便,JSON.NET具有动态序列化和反序列化任意JSON内容的能力,不必将它映射到具体的强类型对象,它可以处理不确定的类型(集合.字典.动态对象和匿名对象),在这篇文章中我将通过JToken.JObject和JArray来动态解析JSON对象,使它很容易创建和检索的JSON内容而无需基础类型.通过JObject和JArray创建JSON对象我们先用非常简单的方法来动态创建一些JSON,可通过JToken派生的JSON.NET对象来进行,最常见的JTo…
ng-repeat是AngularJS中一个非常重要和有意思的directive,常见的用法之一是将某种自定义directive和ng-repeat一起使用,循环地来渲染开发者所需要的组件.比如现在有一个form-text指令,用于快速构建起带自定义数据验证的表单文本框,我们可以用类似下面的代码方便地建立起一个简单的表单: controller中: $scope.form = {}; $scope.form.inputs = [{ model: 'name', required: 'requir…
在互联网无处不在的今天,JSON作为轻量级数据存储格式,被广泛应用到互联网数据传输中.众所周知,JSON由键/值对.对象.数组组成,其中键/值对的值包括以下几种类型: enum ValueType { nullValue = , ///< 'null' value intValue, ///< signed integer value uintValue, ///< unsigned integer value realValue, ///< double value string…
记录一下 引用 using Newtonsoft.Json; using Newtonsoft.Json.Linq; var jsonString = "{\"ApiResources\": [{\"name\": \"name1\",\"Enabled\": true},{\"name\": \"name2\",\"Enabled\": true}]}&q…
C#作为强类型语言,在序列化和反序列化(json)场景中对字符串解析常常需要定义强类型模板,造成编码上的繁琐.其实可以使用匿名类型和动态解析减少json序列化时候的数据模板定义: string a = "1"; bool b = true; double c = 123; var d = new { a, b, c }; var o = new { a, b ,c,d}; var s = JsonConvert.SerializeObject(o); Console.WriteLine…
一般宽带用户的IP都是动态IP,重连之后IP可能会发生变化. 如果想在其他地方连接家里的设备,或者在家中搭建服务器,就会受到影响. 现在提供一种动态解析域名的方式,只要检测到IP的变化,那么就调用阿里云的开放api,更新域名解析 github(欢迎star):https://github.com/liuyinglong/aliyun; npm(aliCloudClient):https://www.npmjs.com/package/aliyun-apisign 说明 每分钟获取一次公网 IP,…
0. 简单概述在家里放一个 NAS 服务器,但是宽带的 IP 地址经常改变,一般路由器自带的花生壳域名解析可以解决,如果路由器没有类似功能或者想使用自己的域名,可以尝试使用 DNSPOD API 来实现域名动态解析. 1. 添加记录 在 dnspod 添加域名后并添加一个记录用来解析宽带的 IP 地址,如添加一个记录h  2. 获取信息 1) 域名信息 domain_id 接口文档:https://www.dnspod.cn/docs/domains.html#domain-info def d…
这两天在家里用树莓派折腾了一个家用服务器,主要用来做 mac 的 Time Machine ,还有就是当做下载机和 nas ,想着平时上班时间家里没人用网络,空着也是空着,就可以利用空闲带宽下个美剧啥的.所以在服务器上装了个远程迅雷和 transmission ,这些网上教程一大把,跟着教程做很快就能搞好. 但是我遇到的问题就是,家用的宽带不是固定 IP 的,如果路由器断个网重新连接就会被分配到不同的 ip ,一旦 ip 换了那就没办法通过外网连接到服务器上了.之前也尝试过在路由器上绑定花生壳,…
通过学习LessCSS,我们知道,Less是需要通过编译才能生成 .css 文件,主要使用三种方式进行编译: 1)使用第三方编译工具,在项目发布前编译好放在项目中. 2)在浏览器端解析执行,需要引用 less.js . 3)使用第三方程序集在后台动态解析,例如:在.net平台下的dotless. 这篇随笔记录了如何在.net MVC项目中使用dotless动态解析less. 具体实现 1.创建MVC4 Web的基本项目 在 Content 文件夹中添加 lesses 文件夹,并在该文件夹下添加自…
Java动态解析域名 Java提供InetAddress类,可以对域名-IP进行正向.逆向解析. InetAddress解析的时候一般是调用系统自带的DNS程序. linux 默认的DNS方式是读取/etc/resolv.conf进行DNS解析. mac 默认的方式是向网关请求获取DNS服务器,然后直接请求DNS服务器进行解析,没有读取/etc/resolv.conf. 我的业务是根据不同的DNS分别解析域名,因此需要动态的设置DNS. JNDI DNS服务提供者设置官方文档 JNDI DNS…
最近在项目中需要动态解析json,但解析json的方式有很多,如何合理的解析就是我们需要考虑的问题?比如Newtonsoft.Json.Linq下提供的JToken.JObject等,Newtonsoft.Json下提供的JsonConvert. JObject 用于操作json对象 JArray 用于操作json数组 JValue 表示数组的值 JProperty  表示对象中的属性,以"key/value"的形式 JToken 用于存放Linq to Json查询后的结果 我们今天…
之前写了<Protobuf 动态加载 .proto 文件并操作 Message>.除了直接读取 .proto 文件之外,还有一种类似的方法.先把 .proto 文件编译成 .pb 文件,再读取 .pb 文件.这种方法虽然比直接读取 .proto 多了一步,但是在运行期加载更快. 仍然使用之前的的 .proto 文件作为示例.使用 protoc 将 .proto 文件编译为 .pb 文件. ./3rdparty/bin/protoc -I./proto -oaddressbook.pb --in…
我们知道反射是 依赖注入 模式的基础,依赖注入要求只在项目中引用定义接口的程序集,而不引用接口实现类的程序集,因为接口实现类的程序集应该是通过反射来动态加载的,这样才能保证接口与其实现类之间的松耦合.可是有时候我们使用反射动态加载程序集的时候会失败,因为除非我们手动将接口实现类的程序集放在项目生成后的bin目录下,或者是在GAC中,否者.Net Framework并不知道该到哪里去寻找接口实现类的dll程序集文件.幸运的是我们如果使用 AppDomain.CurrentDomain.Assemb…
我们知道反射是 依赖注入 模式的基础,依赖注入要求只在项目中引用定义接口的程序集,而不引用接口实现类的程序集,因为接口实现类的程序集应该是通过反射来动态加载的,这样才能保证接口与其实现类之间的松耦合.可是有时候我们使用反射动态加载程序集的时候会失败,因为除非我们手动将接口实现类的程序集放在项目生成后的bin目录下,或者是在GAC中,否者.Net Framework/.Net Core并不知道该到哪里去寻找接口实现类的dll程序集文件.幸运的是我们如果使用 AppDomain.CurrentDom…
在项目中使用SQL动态配置的方式可以让后期的维护和发布后的修改变得更加方便,无论使用那种配置方式都离不开解析成最终真正能执行的SQL.下面代码就是一种比较简单的处理方法,SQL的参数以##括起来. 1.在代码中先建立一个需要解析的SQL,后面需要变成配置方式 /// <summary> /// 暂时用于测试 /// </summary> static string _sql = "SELECT * FROM TB_USER WHERE ID = #ID# AND NAME…
Google Protocol Buffer(简称 Protobuf)是一种轻便高效的结构化数据存储格式,平台无关.语言无关.可扩展,可用于通讯协议和数据存储等领域. 数据交互xml.json.protobuf格式比较 1.json: 一般的web项目中,最流行的主要还是json.因为浏览器对于json数据支持非常好,有很多内建的函数支持. 2.xml: 在webservice中应用最为广泛,但是相比于json,它的数据更加冗余,因为需要成对的闭合标签.json使用了键值对的方式,不仅压缩了一定…
工作中使用openresty,使用第三方服务API通过域名访问.但是,域名通过DNS解析出来之后,在openresty是有 配置解析阶段 很多时候我们会在 Nginx 配置文件里配置上一些域名,比如配置我们的上游服务器. upstream example.com { server test.example.com; } 对于这类域名,Nginx 会在配置解析阶段就将其解析出来,接下来(请求处理过程)使用的都是当时解析得到的 IP.Nginx 核心有一个函数 ngx_parse_url,负责对 u…
Google Protocol Buffer 的常规用法需要使用 protoc 将 .proto 编译成 .pb.h 和 .pb.cc,这样做效率非常高,但是耦合性也很高.在某些追求通用性而不追求性能的场景下,需要使用 .proto 直接操作 protobuf 数据. 本例使用的 .proto 文件来自 https://developers.google.com/protocol-buffers/docs/cpptutorial ,但是把它拆成了两个 .proto 文件 // ./proto/p…
前言 在很多项目中经常会出现需要动态解析表达式和计算的场景,比如一些自动审核规则,或者是一些变量的值通过维护的公式在运行过程中动态算出:由于场景需求,都需要比较灵活的配置对应的表达式,然后希望在需要的时候能根据维护的表达式计算出对应的值:刚好这块和同事聊天的时候说到Flee,感觉挺好用,赶紧来和小伙伴们来分享一波. 正文 1. Flee简介 Flee是一个用于. net框架的表达式解析器和求值器,可以在运行时计算字符串表达式的值(如:sqrt(a^2 + b^2),其中a.b是变量).它的解析和…
在进行项目开发的时候,刚好需要用到对字符串表达式进行求值的处理场景,因此寻找了几个符合要求的第三方组件LambdaParser.DynamicExpresso.Z.Expressions,它们各自功能有所不同,不过基本上都能满足要求.它们都可以根据相关的参数进行字符串表达式的求值,本篇随笔介绍它们三者的使用代码,以及总结其中的一些经验. 数学表达式求值应该是最常见的,一般我们在应用程序中如果需要计算,是需要对参数进行类型转换,然后在后台进行相应计算的.但是如果是计算一些符合的式子或者公式,特别是…
当你看到VB.VFP等开发语言提供的强大的宏执行功能,是不是很羡慕呢?当你寻遍PB的帮助.关于PB开发的书籍或网站而不可得的时候,是不是感到有一丝的遗憾?如果你看到这篇文章,你应该感到振奋,因为你终于可以解决这个问题,而且解决问题的思路既是如此简单.代码既是如此简短.如果再加上你的智慧,应该比我的解决方法更漂亮. 先让我们来了解一些基本知识. 一.代码的载体 在PB中,只有三个地方可以存放代码,那就是函数.事件.属性.这里所指的函数包括有返回值的通常意义下的函数和无返回值的过程以及声明的WINA…
方法1: message person{required int32 age = 1;required int32 userid = 2;optional string name = 3;} message test{required int32 time = 1;required int32 userid = 2;required float price = 3;optional string desc = 4;} #include <string> #include <iostrea…
#!/usr/bin #设置数据库连接 conn='mysql -hhost -Pport -uusername -ppassword' #获取最新的binlog文件 logfile=$($conn -e | awk -F" " '{print $1}') #设置a为1,用户下边的判断 a= #while循环 while true do #获取起始datetime fromDate=$(date "+%Y-%m-%d %H:%M:%S") #获取结束datetime…
服务器放在不同省份的IDC机房,数据如何同步?淘宝的做法是不同IDC机房之间拉光纤,异地容灾和性能无关,异地容灾是应对断电.地震这种不可抗拒因素的 同城分流,异地容灾 是什么意思?你比如说公司的业务涉及北京和上海,你们你就在北京和上海之间拉光纤应对整个节点宕机,但是北京和上海各自的内部你就建立几个点均衡出去. 域名解析啊.你输入一个地址,计算机先找本地如果没有找上一层路由,只要在上一层路由中找到你的地址就可以了.基础啊兄弟 有设备可以讲一个域名解析到多台服务器上的 如何保证数据库同步问题?1.读…
https://www.ibm.com/developerworks/cn/linux/l-cn-gpb/index.html https://originlee.com/2015/03/14/analysis-google-protobuf-reflection/ https://www.cnblogs.com/swey/p/4733638.html https://www.jianshu.com/p/e692a6a2f78e http://www.udpwork.com/item/8132.…
先上图: 下面根据具体代码看这张图. 一.创建一个Person类, Person.h #import <Foundation/Foundation.h> @interface Person : NSObject -(void)sendMessage:(NSString *)message; @end Person.m #import "Person.h" #import <objc/runtime.h> @implementation Person @end 大…
模块化的时候需要用到: #region asp.net解析用户控件 /// <summary> /// asp.net 解析用户控件 /// </summary> /// <param name="virtualPath">控件文件的虚拟路径.</param> /// <returns></returns> public string RenderControl(string virtualPath) { stri…