开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 360|回复: 14
收起左侧

[已解决] protobuf求助

 关闭 [复制链接]
结帖率:81% (26/32)
发表于 2025-3-7 21:49:57 | 显示全部楼层 |阅读模式   江西省吉安市
50精币
QQ截图20250307172229.png

我需要在易语言组包,服务器接收之后需要解包;服务器发送给易语言的protobuf需要易语言按这个格式解包

现在问题是在易语言组包的protobuf服务器无法识别,原因1:如何嵌套User字段,原因2:如何定义序号,原因3:如何定义一段消息的名称

易语言的开源的protobuf模块只能粘在一块,不知道是不是统一的一个消息名称,示例:message 消息名称{},等于缺少“消息名称”,易语言的只能message{所有消息都放在这个里面}

https://bbs.125.la/forum.php?mod=viewthread&tid=14827412
这个模块能否实现图中proto格式的组包以及解包,给个例子
如何按这个格式在易语言实现组包解包

最佳答案

查看完整内容

看不太懂你具体要实现什么. 如果你是想知道如何在易语言组织一个protobuf编组后的数据, 你可能需要自己参考官方对它的消息数据定义: https://protobuf.dev/programming-guides/encoding/ 官方没有提供易语言的实现, 所以你需要自己完成编组(Marshal)和解组(Unmarshal)动作, 你带的链接看起来应该只实现了解析protobuf编组数据, 不过我也不清楚解析到什么去了, 难道易语言可以解析到自定义数组类型? 有点好奇, 你自己可以研究看看. ...

点评

解决了,这个模块可以有个“从proto生成代码”,通过这个方法可以生成和你.proto文件匹配的易语言代码   江西省吉安市  发表于 2025-3-7 23:28

回答提醒:如果本帖被关闭无法回复,您有更好的答案帮助楼主解决,请发表至 源码区 可获得加分喔。
友情提醒:本版被采纳的主题可在 申请荣誉值 页面申请荣誉值,获得 1点 荣誉值,荣誉值可兑换荣誉会员、终身vip用户组。
快捷通道:申请荣誉值无答案申请取消悬赏投诉有答案未采纳为最佳
结帖率:95% (42/44)

签到天数: 4 天

发表于 2025-3-7 21:49:58 | 显示全部楼层   广东省汕头市
看不太懂你具体要实现什么.
如果你是想知道如何在易语言组织一个protobuf编组后的数据, 你可能需要自己参考官方对它的消息数据定义: https://protobuf.dev/programming-guides/encoding/

官方没有提供易语言的实现, 所以你需要自己完成编组(Marshal)和解组(Unmarshal)动作, 你带的链接看起来应该只实现了解析protobuf编组数据, 不过我也不清楚解析到什么去了, 难道易语言可以解析到自定义数组类型? 有点好奇, 你自己可以研究看看.
回复

使用道具 举报

结帖率:95% (42/44)

签到天数: 4 天

发表于 2025-3-7 22:33:26 | 显示全部楼层   广东省汕头市
自己实现官方的编组和解组还是稍微复杂的, 建议用一个中间语言重新编组一下数组, 例如你可以使用Go语言在服务器和易语言客户Duan直接做一层重新编组, 易语言直接用json和Go语言通信, Go语言将收到的json数组重新编组为protobuf发送给服务器. 同理服务器回调给go语言之后重新编组为json再给易语言.

当然你可以用其他语言, 例如python...

点评

数据打成数组了. 之间打成直接了.   广东省汕头市  发表于 2025-3-7 22:35
回复

使用道具 举报

结帖率:100% (5/5)

签到天数: 2 天

发表于 2025-3-7 22:34:40 | 显示全部楼层   广东省佛山市
是这个格式
QQ截图20250307223412.jpg
回复

使用道具 举报

结帖率:81% (26/32)

签到天数: 4 天

 楼主| 发表于 2025-3-7 22:53:09 | 显示全部楼层   江西省吉安市
1425113841 发表于 2025-3-7 22:33
自己实现官方的编组和解组还是稍微复杂的, 建议用一个中间语言重新编组一下数组, 例如你可以使用Go语言在服 ...

数据非常大用json本地打开都要加载半天,走一层其它语言去组包不现实,最优解就是易语言直接组
回复

使用道具 举报

结帖率:81% (26/32)

签到天数: 4 天

 楼主| 发表于 2025-3-7 22:56:55 | 显示全部楼层   江西省吉安市

我组包组出来不是给易语言解的,python protobuf官方库解,我用了你的protobuf模块也不行,你的可以定义序号但是不能定义消息名称
回复

使用道具 举报

结帖率:95% (42/44)

签到天数: 4 天

发表于 2025-3-7 22:58:18 | 显示全部楼层   广东省汕头市
q838210720 发表于 2025-3-7 22:53
数据非常大用json本地打开都要加载半天,走一层其它语言去组包不现实,最优解就是易语言直接组 ...

能有多大, 中间层数组转换会消耗什么时间, 你考虑太多了. 耗时也只有易语言处理耗时, 中间层传输耗不了几十毫秒, 关键看你怎么设计怎么传输, json几十兆百兆甚至几个G都没问题, 关键看你怎么处理JSON, 你流式传输, 只对自己关系的数据快速定位, 消耗不了什么时间, 不过易语言32位也处理不了那么大, 关键看你怎么处理, 我给你提供的这个思路并不会因为数据大小所限制, 要看你的思路, 你觉得不行, 那就是你的思路错了
回复

使用道具 举报

结帖率:81% (26/32)

签到天数: 4 天

 楼主| 发表于 2025-3-7 23:00:17 | 显示全部楼层   江西省吉安市
1425113841 发表于 2025-3-7 22:27
看不太懂你具体要实现什么.
如果你是想知道如何在易语言组织一个protobuf编组后的数据, 你可能需要自己参考 ...

我的场景就是数据量非常庞大需要用protobuf优化,前端是易语言写的,后端是python,易语言组的包不是标准的,python官方库无法识别
回复

使用道具 举报

结帖率:81% (26/32)

签到天数: 4 天

 楼主| 发表于 2025-3-7 23:02:57 | 显示全部楼层   江西省吉安市
1425113841 发表于 2025-3-7 22:58
能有多大, 中间层数组转换会消耗什么时间, 你考虑太多了. 耗时也只有易语言处理耗时, 中间层传输耗不了几 ...

json根本传不出去,直接报400错误,光protobuf还不行,protobuf后还需要gzip压
回复

使用道具 举报

结帖率:95% (42/44)

签到天数: 4 天

发表于 2025-3-7 23:08:54 | 显示全部楼层   广东省汕头市
q838210720 发表于 2025-3-7 23:02
json根本传不出去,直接报400错误,光protobuf还不行,protobuf后还需要gzip压

那你不还是自己思路问题, 数据传输你觉得网络io操作耗时, 那就不要走io传输呗.
你继续搞易语言接受数据, 搞个什么dll给易语言做调用, 解析成json出来, 难道本地操作数据解析很慢? 慢的也只有易语言解析json很慢吧, 你觉得json不是理想的格式, 那就要转成什么你自己转, 反正编组和解组用其他语言实现, 传输你认为什么格式好就用什么格式, 我只是提供一个使用中间层转换这个protobuf到易语言能处理的数据格式思路而已. 并不是你得搭一个服务器去做反向代理之类的操作
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表