关键词:
【中文标题】google protobuf-js:如何有效地解析我的消息【英文标题】:google protobuf-js : How to parse efficiently my messages 【发布时间】:2017-12-06 14:43:04 【问题描述】:我正在开发一个 Angular5+ 前端,它使用带有 WebSocket 的 google-protobuf JS 与后端进行通信。
我的 .proto
文件中目前有 2 个对象:
然后我创建了一个处理程序服务,它将通过 WebSocket 发送消息,但后来我遇到了一个大问题:我找不到有效地解析/反序列化我的对象的方法:
this._socketService.getSocket().onmessage = ((message: Message) =>
const uiArray = new Uint8Array(message.data);
this.parseMessage(uiArray);
);
parseMessage(uiArray: Uint8Array)
let response = null;
// DOES NOT WORK
// response = reqRep.Response.deserializeBinary(uiArray) || notif.BackendStatusNotification.deserializeBinary(uiArray);
// <==== This is where I need to find a good way to deserialize efficiently my objects
// TEMPORARY
if (uiArray.byteLength === 56)
response = reqRep.Response.deserializeBinary(uiArray)
else
response = notif.BackendStatusNotification.deserializeBinary(uiArray);
// Notify different Observables which object has changed based on their type
switch (response && response.hasSupplement() && response.getSupplement().array[0])
case 'type.googleapis.com/req.BackendStatusResponse':
this._responseSubject.next(response);
break;
case 'type.googleapis.com/notif.BackendStatusNotification':
this._notificationSubject.next(response);
break;
default:
console.log('DOESN\'T WORK');
我尝试使用代码中所示的||
始终能够反序列化我的响应,但它不起作用:如果第一个失败,我会收到运行时错误。
我有一些见解,但也许有人可以帮助我:
要么我必须做try
catch
来管理每个案例(这显然是最糟糕的解决方案)。
我在尝试反序列化的方式上做错了,这是一个愚蠢的错误。我虽然也许
我可以使用来自google-protobuf
的通用Message.deserialize()
,但这是行不通的,因为每个对象都应该实现自己的反序列化方法。
或者最后一个,我应该创建一个.proto
文件,在其中设置一个基础对象,该对象将为我的应用程序嵌套所有不同的对象。这样我可以反序列化一种类型的消息,该消息将能够用它反序列化嵌套对象。 (对我来说,这是最好的解决方案,但后端成本很高)
【问题讨论】:
【参考方案1】:最后,我做了我在问题中提到的最后一个选项,即将我所有不同的对象封装在一个通用对象中。
这样,我只有一种方法来反序列化我的对象,然后调度嵌套已知对象的处理。它完美无缺。
【讨论】:
而且适应后端也很快。如何在google colab中有效地使用内存?
】如何在googlecolab中有效地使用内存?【英文标题】:Howtoefficientlyusememoryingooglecolab?【发布时间】:2021-12-1413:40:35【问题描述】:我目前正在googlecolab中训练一个视听模型。我正在使用“VoxCeleb”数据集。我正在尝试从数据集中提... 查看详情
如何有效识别未知文件格式
】如何有效识别未知文件格式【英文标题】:HowdoIeffectivelyidentifyanunknownfileformat【发布时间】:2018-09-2102:57:38【问题描述】:我想写一个解析yum配置文件的程序。这些文件如下所示:[google-chrome]name=google-chrome-64-bitbaseurl=http://dl.goo... 查看详情
如何使 Google 登录令牌的有效期超过 1 小时?
】如何使Google登录令牌的有效期超过1小时?【英文标题】:HowtomakeGooglesign-intokenvalidforlongerthan1hour?【发布时间】:2015-12-3009:39:11【问题描述】:我已经成功实现了谷歌登录。我能够对用户进行身份验证,并作为响应收到令牌。... 查看详情
如何向 Google Apps Script Web App 发送有效的 HTTP 请求?
】如何向GoogleAppsScriptWebApp发送有效的HTTP请求?【英文标题】:HowtosendavalidHTTPrequesttoaGoogleAppsScriptWebApp?【发布时间】:2021-02-0318:17:47【问题描述】:我们从C++应用程序(ArduinoSketck)向Google应用脚本网络应用程序发送了一个HTTP请求... 查看详情
如何有效地与多个线程并行查询 google-cloud-spanner?
】如何有效地与多个线程并行查询google-cloud-spanner?【英文标题】:Howtoefficientlyquerygoogle-cloud-spannerinparallelwithmultiplethreads?【发布时间】:2021-06-2223:38:23【问题描述】:(对不起,这是TL;DR;但我很绝望,想要彻底!)我们正在... 查看详情
如何有效地将 google-closure javascript 转换为现代 ES6?
】如何有效地将google-closurejavascript转换为现代ES6?【英文标题】:HowcouldIeffectivelyconvertgoogle-closurejavascripttomodernES6?【发布时间】:2020-06-2902:06:20【问题描述】:我有一个使用google-closure样式模块goog.provide和类等的代码库。我想对... 查看详情
如何有效检测 UI 文本输入以调用 google places API 以获取建议?
】如何有效检测UI文本输入以调用googleplacesAPI以获取建议?【英文标题】:HowtodetectUItextinputeffectivelytocallgoogleplacesAPIforsuggestions?【发布时间】:2016-02-2219:55:59【问题描述】:在UItextfield中检测用户输入以调用位置API以作为用户类... 查看详情
版本更新后如何使用 Google Chrome 和虚拟主机,在 Quantum Firefox 中仍然有效
】版本更新后如何使用GoogleChrome和虚拟主机,在QuantumFirefox中仍然有效【英文标题】:HowtouseGoogleChromeandVirtualHostsafterversionupdate,stillworksinQuantumFirefox【发布时间】:2018-05-3113:06:06【问题描述】:最新版本之后如何在(XAMPP)中使用... 查看详情
如何检查有效的网址?
】如何检查有效的网址?【英文标题】:Howtocheckvalidurl?【发布时间】:2015-08-0819:59:28【问题描述】:如何检查NSURL是否有效?1)如果我输入“facebook.com”,那么它应该添加“http://www”。2)如果我输入“www.facebook.com”,那么它... 查看详情
ReentrantLock 在同一个线程中被神秘地解锁,即使没有其他线程正在访问它
】ReentrantLock在同一个线程中被神秘地解锁,即使没有其他线程正在访问它【英文标题】:ReentrantLockgetsmysteriouslyunlockedwithinthesamethread,evenwhilenootherthreadsareaccessingit【发布时间】:2019-08-1102:24:15【问题描述】:我有一些我认为非常... 查看详情
boost::interprocess::interprocess_condition::wait 在等待时不会原子地解锁互斥锁
...boost::interprocess::interprocess_condition::wait在等待时不会原子地解锁互斥锁【英文标题】:boost::interprocess::interprocess_condition::waitdoesnotatomicallyunlockmutexwhilewaiting【发布时间】:2013-06-1315:03:28【问题描述】:正如当前帖子标题所说,boostb... 查看详情
Google Analytics Metadata API 识别有效组合
】GoogleAnalyticsMetadataAPI识别有效组合【英文标题】:GoogleAnalyticsMetadataAPIIdentifyvalidcombinations【发布时间】:2016-01-1418:30:27【问题描述】:有没有办法使用GoogleAnalyticsMetadataAPI来识别维度和指标的有效组合?类似于此工具的功能:ht... 查看详情
如何创建有效的 Avro 格式文件 nodejs
】如何创建有效的Avro格式文件nodejs【英文标题】:HowtocreatevalidAvroformatfilenodejs【发布时间】:2016-06-1320:21:16【问题描述】:我正在尝试创建一个有效的avro文件以上传到google-bigquery。varavro=require(\'node-avro-io\').DataFile.AvroFile();varsche... 查看详情
Google BigQuery SQL:使滚动平均子查询或加入对大型数据集更有效
...】:2019-11-1922:53:12【问题描述】:首先,我已经弄清楚了如何使用子查询或联接来获得我需要的东西。由于缺乏GBQ经验,我一直面临的问题:GBQ不允许“相关子查询”因为我要查询 查看详情
Google API 错误,但仍然有效
】GoogleAPI错误,但仍然有效【英文标题】:GoogleAPIerror,butstillworks【发布时间】:2015-06-2121:04:17【问题描述】:连接到googledriveAPI时,我在本地主机上收到此控制台错误,但我在脚本中配置的选择器成功显示了我的驱动器的内容:... 查看详情
在 Google 表格中整理/汇总特定数据的有效方法
】在Google表格中整理/汇总特定数据的有效方法【英文标题】:Efficientwaytocollate/aggregatespecificdatainGoogleSheets【发布时间】:2021-12-2021:44:04【问题描述】:我正在寻找一种在Google表格中收集和汇总某些日期的有效方法。我一直在查... 查看详情
您如何在 localhost 中呈现 Google 广告单元?
】您如何在localhost中呈现Google广告单元?【英文标题】:HowdoyourenderGoogleadunitsinlocalhost?【发布时间】:2019-05-3106:36:51【问题描述】:根据研究,2014年有一个先前的问题(IsGoogleadsenseavailableforlocalhost?)建议添加:data-adtest="on"在测试... 查看详情
如何获取 cppcheck 的有效二进制路径?
】如何获取cppcheck的有效二进制路径?【英文标题】:Howtogetvalidbinarypathforcppcheck?【发布时间】:2013-11-0216:57:29【问题描述】:我正在尝试从这个网站安装cppcheclipse:http://code.google.com/a/eclipselabs.org/p/cppcheclipse/wiki/Installation我已按... 查看详情