精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

為了一份Mock數據,開啟了Protobuf的救贖之路

存儲 存儲軟件
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用法的使用有很多,本次就通過一個例子來看看其基本使用,具體使用可以在網上搜索相關文檔進行學習。

  1. syntax = "proto2" 
  2. package transferData; 
  3.  
  4. message transferMessage { 
  5.     required string name = 1; 
  6.     required int32 age = 2; 
  7.     enum SexEnum { 
  8.         Boy = 0; 
  9.         Girl = 1; 
  10.     } 
  11.     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()

編碼一個message實例或者可利用的普通js對象;

5.decode()

解碼buffer至一個message實例,解碼失敗會排除錯誤;

6.create()

從一系列屬性創建一個新的message實例,其優于通過fromObject創建,是由于其不會產生冗余的轉換;

7.fromObject()

將任何無效的普通js對象轉換為message實例;

8.toObject()

轉換一個message實例去一個任意的普通js對象。

該庫的使用還有一些其它方法,可以通過看其對應文檔進行學習。對于上述轉換關系如下圖所示(來自于官方文檔):

4.2 服務端

其是服務端,當接收到客戶端發送的消息后,利用protobufjs庫中的decode函數進行解析,獲取解析后的結果。

  1. const net = require('net'); 
  2. const protobuf = require('protobufjs'); 
  3.  
  4. const decodeData = data => { 
  5.     protobuf.load('./transfer.proto'
  6.     .then(root => { 
  7.         const transferMessage = root.lookupType('transferData.transferMessage'); 
  8.  
  9.         const result = transferMessage.decode(data); 
  10.         console.log(result); // transferMessage { name'狍狍', age: 1, sexEnum: 1 } 
  11.     }) 
  12.     .catch(console.log); 
  13. const server = net.createServer(socket => { 
  14.     socket.on('data', data =>{ 
  15.         decodeData(data); 
  16.     }); 
  17.  
  18.     socket.on('close', () => { 
  19.         console.log('client disconnected!!!'); 
  20.     }); 
  21. }); 
  22.  
  23. server.on('error', err => { 
  24.     throw new Error(err); 
  25. }); 
  26.  
  27. server.listen(8081, () => { 
  28.     console.log('server port is 8081'); 
  29. }); 

4.3 客戶端

其是客戶端對應的代碼,利用protobufjs庫進行相應的操作,將序列化后的內容發送至服務端。

  1. const net = require('net'); 
  2. const protobuf = require('protobufjs'); 
  3.  
  4. const data = { 
  5.     name'狍狍'
  6.     age: 1, 
  7.     sexEnum: 1 
  8. }; 
  9.  
  10. let client = new net.Socket(); 
  11. client.connect({ 
  12.     port: 8081 
  13. }); 
  14.  
  15. client.on('connect', () => { 
  16.     setMessage(data); 
  17. }); 
  18.  
  19. client.on('data', data => { 
  20.     console.log(data); 
  21.     client.end(); 
  22. }); 
  23.  
  24. function setMessage(data) { 
  25.     protobuf.load('./transfer.proto'
  26.     .then(root =>{ 
  27.         // 根據proto文件中的內容對message進行實例化 
  28.         const transferMessage = root.lookupType('transferData.transferMessage'); 
  29.  
  30.         // 驗證 
  31.         const errMsg = transferMessage.verify(data); 
  32.         console.log('errMsg', errMsg); 
  33.         if (errMsg) { 
  34.             throw new Error(errMsg); 
  35.         } 
  36.  
  37.         // 轉換為message實例 
  38.         const messageFromObj = transferMessage.fromObject(data); 
  39.         console.log('messageFromObj', messageFromObj); 
  40.  
  41.         // 編碼 
  42.         const buffer = transferMessage.encode(messageFromObj).finish(); 
  43.         console.log(buffer); 
  44.  
  45.         // 發送 
  46.         client.write(buffer); 
  47.     }) 
  48.     .catch(console.log); 

 

責任編輯:武曉燕 來源: 前端點線面
相關推薦

2019-04-16 13:57:59

戴爾

2018-01-29 16:29:35

數據開發從業

2019-11-14 21:21:50

數據挖掘數據處理數據分析

2018-08-15 13:49:06

數據分析學習Python

2020-07-15 15:38:15

人臉識別照片活化手機

2025-07-03 09:28:44

架構群消息開發

2019-03-24 14:14:40

代碼閱讀源代碼

2023-09-29 22:41:26

Kubernetes云原生

2015-03-19 15:17:11

2018-07-29 15:33:04

2018-05-03 07:06:21

開發規范iOS

2024-11-07 08:50:56

用戶分析分類維度標簽

2023-09-01 14:02:25

用戶分析攻略

2019-12-03 10:28:53

編程語言PythonJava

2020-10-11 21:52:10

數據AI指南

2020-07-24 09:44:03

安全駐場工程師網絡安全IT安全

2022-04-29 08:48:25

開源

2017-01-05 18:39:35

數據分析大數據時代分析報告

2016-11-16 13:17:29

大數據人才流動

2024-07-10 12:11:30

數據經營分析業務
點贊
收藏

51CTO技術棧公眾號

国产91精品一区| 亚洲女人在线观看| a天堂在线资源| 久久99精品国产91久久来源| 欧美高清自拍一区| 最近中文字幕无免费| yw.尤物在线精品视频| 亚洲女同女同女同女同女同69| 粉嫩av一区二区三区免费观看 | 国产69精品久久app免费版| 美女视频一区二区| 国内精品久久久久久久久| 超薄肉色丝袜一二三| 亚洲网一区二区三区| 91久久精品一区二区三| 波多野结衣与黑人| 国产在线视频网| 成人国产精品视频| 91精品久久久久久久久久入口| 日韩精品视频播放| 亚洲女同中文字幕| 亚洲欧美综合精品久久成人| 中文字幕一区二区三区四| av日韩亚洲| 亚洲无线码一区二区三区| 亚洲国产一区二区三区在线| 香蕉久久一区二区三区| 国产一区二区免费视频| 国产精品久久久久7777婷婷| 日本三级午夜理伦三级三| 99久久精品网| 中文字幕国产精品久久| aaaaa一级片| 激情av综合| 在线播放日韩导航| 天天干在线影院| 中文在线最新版地址| 亚洲国产精品人人做人人爽| 美女黄色片网站| 99reav在线| 国产人妖乱国产精品人妖| 久久资源亚洲| 亚洲 欧美 精品| jlzzjlzz国产精品久久| 国产激情美女久久久久久吹潮| 国产精品无码专区av免费播放| 奇米影视一区二区三区小说| 国产精品jvid在线观看蜜臀| 中文字幕日韩免费| 久久精品欧洲| 日本韩国欧美精品大片卡二| 欧美三日本三级少妇99| 一本色道久久综合亚洲精品不卡| 韩国19禁主播vip福利视频| 青青草偷拍视频| 欧美日韩一卡| 久久久之久亚州精品露出| 久久视频免费看| 激情91久久| 97在线观看视频国产| 日韩免费观看一区二区| 国产欧美日韩一区二区三区在线| 欧美性受xxxx黑人猛交| 中文字幕一区二区人妻电影| 玖玖在线精品| 国产精品亚洲激情| 国产免费久久久| 国产91精品精华液一区二区三区| 国产伦一区二区三区色一情| 天天干天天爽天天操| 91免费精品国自产拍在线不卡| 欧美日本国产精品| 国产二区在线播放| 自拍偷拍欧美精品| 国产aaa免费视频| 午夜不卡影院| 欧美性大战久久久久久久| 视频免费1区二区三区| 日韩精品一区国产| 亚洲精品成人av| xxxx日本免费| 亚洲一区色图| 孩xxxx性bbbb欧美| 中文字幕久久网| 国产精品996| 久久精品magnetxturnbtih| 九色网友自拍视频手机在线| 国产精品久久精品日日| 人妻av无码专区| 日本免费一区二区三区四区| 欧美丰满美乳xxx高潮www| 野战少妇38p| 欧美精品一区二区久久| 欧美美女15p| 日产精品久久久| 另类人妖一区二区av| 国产高清在线精品一区二区三区| 国产在线一二三| 一区二区三区中文字幕精品精品 | 91亚洲男人天堂| 亚洲人成网站在线观看播放| 丁香花在线高清完整版视频| 欧洲色大大久久| 亚洲一二三四五| 日韩av有码| 51精品在线观看| 99riav国产| 国产欧美精品在线观看| 日韩人妻无码精品久久久不卡| 日本美女久久| 日韩电视剧在线观看免费网站| 精品在线观看一区| 久久精品日韩欧美| 国产伦精品一区二区三毛| 美女免费久久| 在线看不卡av| 麻豆国产精品一区| 黄色成人av网站| 成人做爰www免费看视频网站| 久久综合九色综合久| 亚洲影视在线播放| 午夜免费福利视频在线观看| 蜜乳av综合| 久久久久久伊人| 精品国产999久久久免费| 国产精品嫩草影院av蜜臀| 欧美大片在线播放| 欧美一区二区三区婷婷| 在线播放国产一区中文字幕剧情欧美| 中文字幕日韩一级| 成人中文字幕合集| 男女激情免费视频| 日韩在线观看一区二区三区| 日韩有码在线播放| 亚洲天堂视频在线播放| 久久综合九色欧美综合狠狠| 成熟丰满熟妇高潮xxxxx视频| 一区二区三区高清在线观看| 欧美另类第一页| 99精品在线看| 亚洲欧美一区二区三区久本道91| 91福利国产成人精品播放| 久久最新网址| 国产精品扒开腿爽爽爽视频| 欧美91精品久久久久国产性生爱| 欧美色视频日本高清在线观看| 伊人网综合视频| 中文国产一区| 久久亚洲高清| 中文字幕日本一区二区| 国产一区二区三区18| 中文字幕理论片| 国产精品国产自产拍在线| 亚洲无吗一区二区三区| 日韩情爱电影在线观看| 91精品久久久久久久久久| 日本三级在线播放完整版| 欧美精三区欧美精三区 | 午夜天堂影视香蕉久久| 波多野结衣有码| 亚洲综合精品| 亚洲国产欧洲综合997久久| 超碰国产精品一区二页| 九色成人免费视频| 日韩在线视频免费| 欧美日韩一区二区在线播放| 一区二区三区在线观看免费视频| 日产欧产美韩系列久久99| 宅男av一区二区三区| 狂野欧美xxxx韩国少妇| 国内自拍欧美激情| 黄色片在线免费看| 欧美人与z0zoxxxx视频| 免费在线观看亚洲| 91视视频在线观看入口直接观看www | 精品欧美激情在线观看| 国产精品久久久久久久久久免费 | 干日本少妇首页| 成人羞羞视频播放网站| 91香蕉电影院| 麻豆mv在线观看| 尤物yw午夜国产精品视频| h片在线免费看| 欧美日韩亚洲成人| a级黄色免费视频| 成人午夜精品在线| 成人亚洲视频在线观看| 欧美电影《睫毛膏》| 国产精品免费区二区三区观看 | 欧美制服丝袜第一页| 国产在线免费看| bt欧美亚洲午夜电影天堂| 久久综合伊人77777麻豆最新章节| 亚洲精品a级片| 欧美日韩电影一区二区| 精品入口麻豆88视频| 日韩av电影在线免费播放| 18加网站在线| 国产亚洲欧美一区| 欧美视频久久久| 欧美日本在线一区| wwwxxx亚洲| 日韩码欧中文字| 播金莲一级淫片aaaaaaa| 国产美女一区二区三区| 成人免费无码av| 亚洲成人在线| 特级黄色录像片| 狠狠做深爱婷婷综合一区| 国产精品日韩一区二区免费视频| 成人久久网站| 日本成人在线视频网址| 黄色在线看片| 久久亚洲精品中文字幕冲田杏梨| 免费福利在线视频| 亚洲精品国产精品国产自| 国产女无套免费视频| 在线观看www91| 国产午夜在线播放| 亚洲夂夂婷婷色拍ww47| 三级在线观看免费大全| 国产欧美精品一区aⅴ影院| 三级电影在线看| 成人免费看视频| 亚洲成年人av| 国产美女娇喘av呻吟久久| 怡红院亚洲色图| 美女精品自拍一二三四| 青青视频在线播放| 午夜在线一区二区| 国产极品尤物在线| 在线观看不卡| 久无码久无码av无码| 欧美激情偷拍| 亚洲精品天堂成人片av在线播放| 午夜激情久久| 一区一区视频| 91精品综合久久久久久久久久久 | av大全在线免费看| 亚洲欧美国产日韩天堂区| 五月婷婷六月色| 亚洲国产黄色片| 天天操天天操天天| 日韩高清av在线| 三级视频网站在线| 亚洲美女自拍视频| 免费在线国产| 一本一本久久a久久精品牛牛影视| 大胆av不用播放器在线播放 | 日本天码aⅴ片在线电影网站| 操人视频在线观看欧美| av在线免费网址| 欧美精品少妇videofree| 天堂av资源在线观看| 欧美黑人极品猛少妇色xxxxx| 免费在线看污片| 91国产在线精品| 国产超碰精品| 国产精品自拍视频| 99国内精品久久久久| www.久久艹| 欧美巨大xxxx| 日韩亚洲视频| 羞羞答答成人影院www| 波多野结衣与黑人| 男人天堂欧美日韩| 污污网站免费看| 国产乱子伦一区二区三区国色天香 | 国产中文字幕91| 特级毛片在线| 97av在线视频免费播放| 激情亚洲影院在线观看| 国产日韩欧美自拍| 99re8这里有精品热视频8在线| 91免费观看| 校花撩起jk露出白色内裤国产精品 | 性一交一乱一伧国产女士spa| 欧美另类综合| 国产一区二区三区精彩视频| 另类的小说在线视频另类成人小视频在线| 一本一道久久a久久综合蜜桃| 粉嫩久久99精品久久久久久夜| 国产艳俗歌舞表演hd| 国产精品美女一区二区| 久久久久久久久精| 91电影在线观看| 国产av一区二区三区精品| 日韩精品在线免费观看| 在线免费观看黄色| 国内精品一区二区三区| 欧美日韩伦理一区二区| 国产精品一区二区你懂得| 成人同人动漫免费观看| 激情五月婷婷六月| 日韩国产精品久久久久久亚洲| 亚洲国产综合av| 国产片一区二区三区| 国产无码精品在线观看| 欧美日韩亚洲综合在线| 午夜福利理论片在线观看| 久久最新资源网| 在线观看精品| 国产伦精品一区二区三区免费视频| 全球成人免费直播| 国产中文字幕在线免费观看| 国产乱一区二区| 美国黄色特级片| 精品福利一区二区| 国产高潮流白浆喷水视频| 一本色道久久综合狠狠躁篇怎么玩 | 成人公开免费视频| 日韩视频免费观看高清完整版在线观看 | 黄色录像二级片| 午夜久久电影网| 国内毛片毛片毛片毛片| 中文字幕亚洲色图| 色尼玛亚洲综合影院| 国产一区二区无遮挡 | 国产日韩一区二区在线| 国产福利一区二区三区视频在线| 一二三四国产精品| 色猫猫国产区一区二在线视频| 蜜桃av中文字幕| 欧美成人免费观看| 97色婷婷成人综合在线观看| 欧美三级网色| 久久精品九九| 最新中文字幕视频| 亚洲.国产.中文慕字在线| 高清国产mv在线观看| 欧美成人激情视频| 国产亚洲亚洲国产一二区| 一区二区精品在线| 美国欧美日韩国产在线播放| www色com| 欧美亚洲丝袜传媒另类| 国产露出视频在线观看| 日本国产精品视频| 精品国产一区二区三区久久久樱花| 一女被多男玩喷潮视频| www.欧美亚洲| av大片在线免费观看| 日韩禁在线播放| 性xxxxfreexxxxx欧美丶| 久久一区二区三区av| 午夜亚洲视频| 中文字幕人妻一区二区三区在线视频| 日韩欧美在线国产| 国产中文字幕在线播放| 国产精品视频资源| 亚洲91中文字幕无线码三区| 热久久久久久久久| 亚洲欧美激情插| 性生交大片免费看女人按摩| 欧美高清第一页| 日韩精品导航| 黄色一级二级三级| 国产精品电影院| 国产精品国产三级国产普通话对白 | 国产精品嫩草影院一区二区| 欧美三级美国一级| 国产探花在线看| 亚洲精品老司机| 日韩中文字幕观看| 性欧美视频videos6一9| 国产欧美日韩精品高清二区综合区| 亚欧在线免费观看| 亚洲色图视频网站| 好男人在线视频www| 欧美在线观看一区二区三区| 欧洲杯足球赛直播| 又色又爽又黄视频| 午夜精品久久久久久久99水蜜桃| 欧美新色视频| 成人福利在线观看| 黄色欧美日韩| 丁香花五月婷婷| 91精品国产福利在线观看| av最新在线| 先锋影音亚洲资源| 国产91在线观看| 欧美一区二区三区网站| 久久伊人91精品综合网站| 国产精品流白浆在线观看| 狠狠热免费视频| 亚洲综合男人的天堂| 精品电影在线| 999热视频在线观看| 久久久久久久欧美精品| 欧美三级日本三级| 国产午夜精品免费一区二区三区 | 欧美亚洲精品天堂| 久久精品国亚洲| 亚洲第一福利专区| 国产九九九视频| 日韩欧美一区二区在线| 日韩精品分区| 一区高清视频| 久久精品免视看| 乱色精品无码一区二区国产盗|