flatbuffers 代码集成
参考上次的操作,因为默认的不是nodejs 模块友好的,使用了typescript 同时集成了代码
schema
union HttpCommand {
HttpQuery,
HttpResultSet,
HttpError
}
table HttpMessage {
message_id: uint;
command: HttpCommand;
}
table HttpQuery {
query: string;
}
table HttpError {
error: string;
}
table HttpResultSet {
columns: [string];
rows: [HttpRow];
}
table HttpRow {
values: [HttpColumnValue];
}
table HttpColumnValue {
string_value: string;
}
root_type HttpMessage;
生成代码
flatc --ts http_message.fbs
生成nodejs 模块友好的代码
使用tsc 编译
{
"name": "first",
"version": "1.0.0",
"main": "index.js",
"license": "MIT",
"dependencies": {
"flatbuffers": "^1.12.0"
},
"scripts": {
"watch": "tsc --watch"
},
"devDependencies": {
"@types/flatbuffers": "^1.10.0",
"typescript": "^4.2.3"
}
}
代码集成
const flatbuffers = require("flatbuffers").flatbuffers
const {HttpQuery,HttpMessage,HttpCommand} = require("./http_message_generated")
const builder = new flatbuffers.Builder(1024);
const queryOffset = builder.createString("dalongrong");
const httpQueryOffset = HttpQuery.createHttpQuery(builder,queryOffset);
const messageId = 10000
const message = HttpMessage.createHttpMessage(builder, messageId, HttpCommand.HttpQuery, httpQueryOffset);
builder.finish(message);
let msg =builder.asUint8Array()
const buf = new flatbuffers.ByteBuffer(msg);
const myHttpMessage = HttpMessage.getRootAsHttpMessage(buf);
console.log("command:",myHttpMessage.commandType())
if (myHttpMessage.commandType()==HttpCommand.HttpQuery){
const httpQuery = myHttpMessage.command(new HttpQuery());
console.log("query:",httpQuery.query())
}
运行效果
参考资料
https://google.github.io/flatbuffers/flatbuffers_guide_use_typescript.html
https://google.github.io/flatbuffers/flatbuffers_guide_using_schema_compiler.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2020-03-28 bashible docker集成使用
2014-03-28 http-equiv 了解