H5实践(3)- JS 2进制流解析
2018-03-27 18:31
218 查看
常用方案
目前比较流行的2端协议解析,比如会用 protobuf 这样的广泛支持多语言的开源库。这样就可以省掉自己对每个消息做解析、反解析。
这里讲的是 自己解析2进制流。
c-struct
github上搜了下,接口比较人性化的,就是这个库了:https://github.com/majimboo/c-struct
仿照C结构体定义,并提供pack、unpack接口。
用了下,这个库有几个问题:
pack方法有bug…
字符串 序列化时不带长度信息。无法配合其他语言系统解析
不支持2进制数据类型
一个struct需要定义2次,可以优化掉,仅定义一次即可。
修改版本
为了能方便npm管理,并没有fork这个开源库。而是参照其代码,重新开了个:
https://github.com/fananchong/cstruct-js
其中,暂时做了下面的事情:
修复pack数据错误bug
序列化字符串时,加带长度信息
近段时间内会把下面事情一并KO掉:
支持2进制数据类型
一个struct仅需定义1次
目前代码使用例子
(function () { 'use strict'; var _ = require('c-struct'); var NetMsgHead = require('../netmsg_head.js'); var NetMsgMsgId = require('../netmsg_msgid.js'); module.exports = ClientVertifyReq; var CMD = NetMsgMsgId.ClientVertifyReqMsgID; var structName = 'ClientVertifyReq'; function ClientVertifyReq() { this.Source = 0; this.UID = 0; this.Token = ""; } var _ClientVertifyReq = new _.Schema({ Source: _.type.uint8, UID: _.type.uint64, Token: _.type.string(32) }); _.register(structName, _ClientVertifyReq); var proto = ClientVertifyReq.prototype; proto.encode = function () { var self = this; var msgbuf = _.packSync(structName, { Source: self.Source, UID: self.UID, Token: self.Token }); return Buffer.concat([new NetMsgHead(msgbuf.length, CMD).encode(), msgbuf]); }; proto.decode = function (buf) { var head = new NetMsgHead(0, 0); head.decode(buf); var obj = _.unpackSync(structName, buf.slice(NetMsgHead.len)); this.Source = obj.Source; this.UID = obj.UID; this.Token = obj.Token; }; })();
相关文章推荐
- js 闭包常见的两种情况的简单解析
- ionic + cordova+angularJs 搭建的H5 App完整版总结
- (无JS)微信端纯H5的X,Y轴滑动
- JS使用eval解析JSON的注意事项分析
- JavaScript:全面解析各种浏览器网页中的JS代码的执行顺序
- Vue.js之vip视频解析代码
- Java后台接收js数组对象,并解析
- JS解析json数据(如何将json字符串转化为数组)
- JS解析json数据(如何将json字符串转化为数组)
- JS解析xml文件
- phoengap源码解析——插件机制,java和js代码互调用详解
- H5全屏滚动专题页最佳实践
- 编译原理及实践教材TINY编译器代码解析
- 《深入解析Android:Telephony原理剖析及最佳实践》一书即将发行,欢迎各位Android开发、爱好者订阅
- js/jquery解析json和数组格式的方法介绍
- js024-最佳实践
- Vue.js最佳实践(五招助你成为vuejs大师)
- Mock.JS拦截HTTP请求实例解析-JS笔记
- FireFox中JS引擎对函数声明式的解析与其他浏览器的差异
- OOA&D实践之路——真实案例解析OO理论与实践(七、【第一轮迭代】需求分析与领域分析)