当前位置 : 主页 > 大数据 > 区块链 >

WebSocket中关于使用ProtoBuf传输数据介绍js部分

来源:互联网 收集:自由互联 发布时间:2021-06-22
前言介绍: 本案例主要介绍如何在js里把接收到的protobuf数据转换为对象与如何把对象转换为protobuf数据。 为了能简单说明问题,在本案例中只有js部分,关于后台服务的像前台发送数据

前言介绍:

    本案例主要介绍如何在js里把接收到的protobuf数据转换为对象与如何把对象转换为protobuf数据。

为了能简单说明问题,在本案例中只有js部分,关于后台服务的像前台发送数据部分在案例一中已经介绍。

环境需求:

    需要github大神wiki提供的三个js文件:[本案例的下载中已经提供]

github:https://github.com/dcodeIO/ProtoBuf.js/wiki

1.ByteBufferAB.min.js

     2.Long.min.js

     3.ProtoBuf.min.js

代码介绍:


itstack.proto

 
 
  1. //个人博客:www.itstack.org
  2. //站长:付政委
  3. //QQ:184172133
  4.  
  5. //这里是一个proto文件,我们在www.itstack.org为想象,定义它下面分为大知识点模块,每个模块下又有子模块
  6. // 父模块
  7. message ParentModule{
  8. // 序号
  9. required int32 number =1;
  10. // 名称
  11. required string name =2;
  12. // 子模块[repeated 可重复,相当于集合]
  13. repeated ChildrenModule childrenModule=3;
  14. }
  15.  
  16. // 子模块
  17. message ChildrenModule{
  18. // 序号
  19. required int32 number =1;
  20. // 名称
  21. required string name =2;
  22. }

 

www.itstack.org.html

 

 
 
  1. <!DOCTYPE html>
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  5. <!-- 引入protobuf相关js文件 -->
  6. <script src="lib/Long.min.js"></script><!-- https://raw.github.com/dcodeIO/Long.js/master/dist/Long.min.js -->
  7. <script src="lib/ByteBufferAB.min.js"></script><!-- https://raw.github.com/dcodeIO/ByteBuffer.js/master/dist/ByteBufferAB.min.js -->
  8. <script src="lib/ProtoBuf.min.js"></script><!-- https://raw.github.com/dcodeIO/ProtoBuf.js/master/dist/ProtoBuf.min.js -->
  9.  
  10. <!--ProtoBuf处理-->
  11. <script language="javascript" type="text/javascript">
  12. if(typeof dcodeIO ===‘undefined‘||!dcodeIO.ProtoBuf){
  13. throw(newError("ProtoBuf.js is not present. Please see www/index.html for manual setup instructions."));
  14. }
  15. // 创建ProtoBuf
  16. varProtoBuf= dcodeIO.ProtoBuf;
  17.  
  18. // 先构造两个子模块
  19. // 子模块-1
  20. varChildrenModule_1=ProtoBuf.loadProtoFile("itstack.proto").build("ChildrenModule");
  21. var childrenModule_1 =newChildrenModule_1();
  22. childrenModule_1.setNumber(1);
  23. childrenModule_1.setName("Nginx5.0 初级案例");
  24.  
  25. // 子模块-2
  26. varChildrenModule_2=ProtoBuf.loadProtoFile("itstack.proto").build("ChildrenModule");
  27. var childrenModule_2 =newChildrenModule_2();
  28. childrenModule_2.setNumber(2);
  29. childrenModule_2.setName("Nginx5.0 中级案例");
  30.  
  31. // 父模块
  32. varParentModule=ProtoBuf.loadProtoFile("itstack.proto").build("ParentModule");
  33.  
  34. // 像父模块设置值
  35. var parentModule =newParentModule();
  36. parentModule.setNumber(1);
  37. parentModule.setName("Nginx5.0");
  38. parentModule.setChildrenModule(newArray(childrenModule_1,childrenModule_2));
  39.  
  40. // 打印父模块此时数据【火狐浏览器F12进行观察】
  41. console.log("ProtoBuf对象数据:");
  42. console.log(parentModule);
  43.  
  44. // 模拟发送
  45. // 1.对象转字节:parentModule.toArrayBuffer()
  46. // 2.字节转对象:ParentModule.decode()
  47. var msgDec =ParentModule.decode(parentModule.toArrayBuffer());
  48. // 接收到的数据:
  49. console.info("接收到的数据:");
  50. console.info(parentModule.toArrayBuffer());
  51. // 打印转换后的信息
  52. console.info("经过ParentModule.decode转换后的数据:");
  53. console.info(msgDec);
  54.  
  55. </script>
  56. </head>
  57. <body>
  58. </body>
  59. </html>
测试解图:

 


 

工程下载:

http://itstack.qiniudn.com/TestJsProtobuf.zip

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

网友评论