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

WebSocket中关于使用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. //这里是一个proto文件,我们在www.itstack.org为想象,定义它下面分为大知识点模块,每个模块下又有子模块
  5. // 父模块
  6. message ParentModule{
  7. // 序号
  8. required int32 number =1;
  9. // 名称
  10. required string name =2;
  11. // 子模块[repeated 可重复,相当于集合]
  12. repeated ChildrenModule childrenModule=3;
  13. }
  14. // 子模块
  15. message ChildrenModule{
  16. // 序号
  17. required int32 number =1;
  18. // 名称
  19. required string name =2;
  20. }

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. <!--ProtoBuf处理-->
  10. <script language="javascript" type="text/javascript">
  11. if(typeof dcodeIO ===‘undefined‘||!dcodeIO.ProtoBuf){
  12. throw(newError("ProtoBuf.js is not present. Please see www/index.html for manual setup instructions."));
  13. }
  14. // 创建ProtoBuf
  15. varProtoBuf= dcodeIO.ProtoBuf;
  16. // 先构造两个子模块
  17. // 子模块-1
  18. varChildrenModule_1=ProtoBuf.loadProtoFile("itstack.proto").build("ChildrenModule");
  19. var childrenModule_1 =newChildrenModule_1();
  20. childrenModule_1.setNumber(1);
  21. childrenModule_1.setName("Nginx5.0 初级案例");
  22. // 子模块-2
  23. varChildrenModule_2=ProtoBuf.loadProtoFile("itstack.proto").build("ChildrenModule");
  24. var childrenModule_2 =newChildrenModule_2();
  25. childrenModule_2.setNumber(2);
  26. childrenModule_2.setName("Nginx5.0 中级案例");
  27. // 父模块
  28. varParentModule=ProtoBuf.loadProtoFile("itstack.proto").build("ParentModule");
  29. // 像父模块设置
  30. var parentModule =newParentModule();
  31. parentModule.setNumber(1);
  32. parentModule.setName("Nginx5.0");
  33. parentModule.setChildrenModule(newArray(childrenModule_1,childrenModule_2));
  34. // 打印父模块此时数据【火狐浏览器F12进行观察】
  35. console.log("ProtoBuf对象数据:");
  36. console.log(parentModule);
  37. // 模拟发送
  38. // 1.对象转字节:parentModule.toArrayBuffer()
  39. // 2.字节转对象:ParentModule.decode()
  40. var msgDec =ParentModule.decode(parentModule.toArrayBuffer());
  41. // 接收到的数据:
  42. console.info("接收到的数据:");
  43. console.info(parentModule.toArrayBuffer());
  44. // 打印转换后的信息
  45. console.info("经过ParentModule.decode转换后的数据:");
  46. console.info(msgDec);
  47. </script>
  48. </head>
  49. <body>
  50. </body>
  51. </html>
测试解图:


工程下载:

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

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

免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部