欧博博彩官网
澳门六合彩现金网博彩平台注册送奖金_为了一份Mock数据,开启了Protobuf的救赎之路
发布日期:2023-10-30 06:46    点击次数:151

澳门六合彩现金网博彩平台注册送奖金_为了一份Mock数据,开启了Protobuf的救赎之路

澳门六合彩现金网博彩平台注册送奖金_[[421682]] 一、布景

近期在作念一个需求,该需求需要和后端进行交互,为了并行建树葡京娱乐娱乐城,就跟后端产生了如下的对话:

前端:老铁,不错给份mock数据吗?

网络赌博输了

后端:mock数据太勤苦了,你我方来吧!!!

前端:我奈何知说念数据长啥样,怎样mock呀!(爱怜)

后端:按照商定的接口mock就行,平直给我抛出了一个proto文献

前端:此时还是一脸懵逼景象,proto是个啥?怎样把柄proto来mock一份数据?后端为什么要用proto,JSON不香吗?为了弥补上我方欠缺的一环,开启了Protobuf的救赎之路。

二、Protobuf是什么?

Protobuf 行为一种跨平台、话语无关、可彭胀的序列化结构数据的要领,已世俗应用于网络数据交换及存储。其现在还是扶直的建树话语有多种(C++、Java、Python、Objective-C、C#、JavaNano、JavaScript、Ruby、Go、PHP),确定可参考(https://github.com/52im/protobuf)。其具有如下优过失:

博彩平台注册送奖金

优点

(1)序列化后体积小,稳妥网络传输

(2)扶直跨平台、多话语

(3)具有较好的升级和兼容性(具有向后兼容的特点,更新数据结构以后,老版块依旧不错兼容)

(4)序列化和反序列化的速率较快

过失

Protobuf是二进制契约,编码后的数据可读性差

三、Protobuf的结构

Protobuf用法的使用有好多,本次就通过一个例子来望望其基本使用,具体使用不错在网上搜索磋议文档进行学习。

销售费用三年累计8.17亿近12倍于研发

盟升电子(688311.SH)发布公告,上海证券交易所上市审核委员会于2023年5月5日召开了2023年第31次审议会议,对公司向不特定对象发行可转换公司债券的申请进行了审议。根据会议审议结果,公司本次向不特定对象发行可转换公司债券的申请符合发行条件、上市条件和信息披露要求。

syntax 葡京娱乐娱乐城= "proto2" package transferData;  message transferMessage {     required string name = 1;     required int32 age = 2;     enum SexEnum {         Boy = 0;         Girl = 1;     }     optional SexEnum SexEnum = 3; } 
1.syntax = "proto2";

该行用于指定语法版块,现在有两个版块proto2和proto3,两个版块不兼容,要是不指定,默许语法是proto2.

银河护卫队分析 2.package transferData;

用于界说该包的包名;

3.message

message是Protobuf中最基本的数据单位,其中不错嵌套message或其它的基础数据类型的成员;

4.属性

message中的每一滑即是一个属性,举例required string name = 1,其构成如下所示:

标注 类型 属性名 属性限定号 [options] required string name = 1 一些可选项

(1)标注有三种:

required:必选属性;

optional:可选属性;

repeated:相易字段,访佛于动态数组;

(2)类型有多种,每种话语不同,举例:int32、int64、int、float、double、string等;

(3)属性名:用于表征该属性的称呼;

昇得源体育备用网址

(4)属性限定号:protobuf为了进步数据的压缩和可选性等功能界说的,需要按照限定进行界说,且不允许有相易;

(5)[options]:protobuf提供了一些内置的options可供采纳思,欧博在线登录可大大进步protobuf的彭胀性。

5.enum

界说音问类型时,可能需要某字段值是一些预设值之一,此时成列类型就大略发达作用了。

注:protobuf还有好多用法,此处只作念了浅近先容,有可爱的同学可进一步我方深远学习。

四、实战

聊了那么多,底下就参加实战要领,实战将在node运行环境下,构建TCP畅达,然后由客户端发送经过Protobuf序列化的本色至干事端,然后干事端接纳到信息之后进行表露,其中proto文献的序列化和反序列化将使用protobuf.js包,其是一个纯 JavaScript 罢了,扶直node.js和浏览器。它易于使用,速率极快,况且不错使用.proto文献开箱即用!(https://www.npmjs.com/package/protobufjs)

4.1 基本使用

本次表露.proto文献使用的是protobuf.js包,常用的要领主要有以下几个:

1.load()

用该函数加载对应的.proto文献,加载完成之后才智够使用内部的message以及进行后续的操作;

2.lookupType()

在加载完.proto后,需要对使用的message进走时滚动,即完成message实例化的经由;

3.verify()

该函数用于考证平时对象是某知足对应的message结构;

其实,做好“能耗双控”办法:比如,调整产业结构,淘汰落后产能,通过技术升级提升资源利用率;,优化地区、产业、企业间能源梯级利用,借助智慧化管理系统减少能源浪费;既有建筑进行节能改造、绿色照明、绿色制冷,聘请公司设计绿色节能方案。

4.encode()

皇冠hg86a

编码一个message实例或者可哄骗的平时js对象;

5.decode()

澳门六合彩现金网

解码buffer至一个message实例,解码失败会摒除乖谬;

6.create()

从一系列属性创建一个新的message实例,其优于通过fromObject创建,是由于其不会产生冗余的移动;

7.fromObject()

将任何无效的平时js对象移动为message实例;

8.toObject()

个性

皇冠客服飞机:@seo3687

皇冠信用盘要押金吗

移动一个message实例去一个自便的平时js对象。

皇冠网址

该库的使用还有一些其它要领,不错通过看其对应文档进行学习。关于上述移动联系如下图所示(来自于官方文档):

4.2 干事端

其是干事端,当接纳到客户端发送的音问后,哄骗protobufjs库中的decode函数进行表露,取得表露后的成果。

const net = require('net'); const protobuf = require('protobufjs');  const decodeData = data => {     protobuf.load('./transfer.proto')     .then(root => {         const transferMessage = root.lookupType('transferData.transferMessage');          const result = transferMessage.decode(data);         console.log(result); // transferMessage { name: '狍狍', age: 1, sexEnum: 1 }     })     .catch(console.log); } const server = net.createServer(socket => {     socket.on('data', data =>{         decodeData(data);     });      socket.on('close', () => {         console.log('client disconnected!!!');     }); });  server.on('error', err => {     throw new Error(err); });  server.listen(8081, () => {     console.log('server port is 8081'); }); 
4.3 客户端

其是客户端对应的代码,哄骗protobufjs库进行相应的操作,将序列化后的本色发送至干事端。

const net = require('net'); const protobuf = require('protobufjs');  const data = {     name: '狍狍',     age: 1,     sexEnum: 1 };  let client = new net.Socket(); client.connect({     port: 8081 });  client.on('connect', () => {     setMessage(data); });  client.on('data', data => {     console.log(data);     client.end(); });  function setMessage(data) {     protobuf.load('./transfer.proto')     .then(root =>{         // 把柄proto文献中的本色对message进行实例化         const transferMessage = root.lookupType('transferData.transferMessage');          // 考证         const errMsg = transferMessage.verify(data);         console.log('errMsg', errMsg);         if (errMsg) {             throw new Error(errMsg);         }          // 移动为message实例         const messageFromObj = transferMessage.fromObject(data);         console.log('messageFromObj', messageFromObj);          // 编码         const buffer = transferMessage.encode(messageFromObj).finish();         console.log(buffer);          // 发送         client.write(buffer);     })     .catch(console.log); } 

 



上一篇:没有了
下一篇:乐鱼电子游戏博彩平台最低存款金额_振作一笑, 状态来到, 越看越上面