vue3项目使用WebSocket 传输 Protobuf 格式的数据
创始人
2025-05-30 21:02:14
0

vue3项目使用WebSocket 传输 Protobuf 格式的数据

  • 前言
  • 一、基础库安装
  • 二、具体代码实现
    • 1.服务端编写
      • message.proto文件定义
    • 2.客户端代码实现
      • 方法1
      • 方法2
  • 总结


前言

前端和后端数据传输常用数据格式:

JSON(JavaScript Object Notation):与 HTTP 协议和 REST API 配合使用时,JSON 数据是最常用的数据格式之一。对于 WebSocket,JSON 数据同样适用。客户端可以将消息转换为 JSON 对象,并将其发送到服务器进行处理,在服务器上生成响应并返回给客户端。

Binary Data:WebSocket 还支持二进制数据传输。此方法特别适用于需要在网络上传输大量数据的应用程序。使用二进制数据格式,您可以将数据压缩为更小的包,以提高传输速度并降低带宽消耗。

Protocol Buffers:Protocol Buffers 是一种 Google 开发的高效数据结构序列化格式。与 JSON 和 XML 不同,Protocol Buffers 将数据编码为二进制格式,可快速解析和传输。此方法特别适用于需要在网络上传输大量数据的应用程序。
但是在日常开发当中使用的最多的还是JSON格式
下面我简单介绍一下前后端使用protobuf传输数据的案例


一、基础库安装

pnpm add ws
pnpm add protobufjs
pnpm add protobufjs-cli -D

二、具体代码实现

本文完整示例代码

1.服务端编写

message.proto文件定义

syntax = "proto3";message Message {string text = 1;
}

代码如下(示例):

const WebSocket = require('ws');
const protobuf = require('protobufjs');
const path = require('path');// 加载 .proto 文件
const root = new protobuf.Root();
root.loadSync(path.join(__dirname, './message.proto'));// 获取 Message 类型
const Message = root.lookupType('Message');// 创建 WebSocket 服务器
const server = new WebSocket.Server({ port: 8080 });server.on('connection', (socket: any) => {console.log('Client connected');// 接收客户端发送的消息socket.on('message', (data: Buffer) => {const message = Message.decode(new Uint8Array(data));console.log('Received message:', message);// 发送响应消息// const response = { text: 'Hello, client!'};// const buffer = Message.encode(Message.fromObject(response)).finish();// socket.send(buffer);const response = Message.create({ text: `服务端已收到数据: ${message.text}` });// 序列化消息对象,并将其发送给服务器const buffer = Message.encode(response).finish();socket.send(buffer);});// 监听连接断开事件socket.on('close', () => {console.log('Client disconnected');});
});const http = require('http');
const fs = require('fs');// 创建 HTTP 服务器,监听客户端请求
const httpserver = http.createServer(async (req:any , res: any) => {console.log(`Receive request: ${req.method} ${req.url}`);try {// 如果请求的是 .proto 文件,则读取文件内容并返回给客户端if (req.url.endsWith('.proto')) {const content = await fs.promises.readFile(`${path.join(__dirname, './message.proto')}`, 'utf8');res.setHeader('content-type', 'text/plain');res.end(content);return;}// 如果请求的不是 .proto 文件,则返回 404 Not Found 错误res.statusCode = 404;res.end();} catch (err) {console.error(err);res.statusCode = 500;res.end();}
});// 启动 HTTP 服务器
httpserver.listen(3001, () => {console.log('HTTP server started!');
});

2.客户端代码实现

方法1

代码如下(示例):

方法2

方法2不同之处在与使用protobufjs-cli工具将message.proto文件编译出js文件 还能编译出ts声明文件,j具有类型提示对TS项目更加友好

编译方法

pbjs -t static-module -w es6 -o ../web/src/components/compiled.js message.proto
pbts -o ../web/src/components/compiled.d.ts ../web/src/components/compiled.js

代码实现


总结

以上就是vue3项目中传输protobuf数据的基本使用方法,仅供参考,如果有问题请留言评论。

相关内容

热门资讯

route-resource-... route-resource-preload 🚀 专注于提升应用首屏加载速度...
房地产合同管理台账范本 房地产... 合同管理台账范本:   某房地产开发有限公司合同管理台账
关于房地产合同专员职责范本 房...  合同管理专员的岗位职责:  职责1  协助采购价格和合同管理体系的建立、完善和更新工作  职责2 ...
秋天的怀念读后感800字 多篇...   秋天的怀念读后感800字篇一:  《秋天的怀念》,讲述的是一个身患重病的母亲无微不至地关照着双腿...
关于技术改造合同范本2篇 设备...  技术改造合同范本一  技术改造借款合同  借款单位:_______________  地址:___...
关于房地产投资合同范文 房地产...  房地产投资合同范文一  甲 方:**公司  法定代表人:_____________________...
使用自签名证书的SSL (li... 配置服务器端mkdir -p /u01/app/oracle/walletorapki wallet...
Java设计模式 -05适配器... 适配器模式 一、现实生活中的适配器例子 泰国插座用的是两孔的(欧标)&#...
国际技术服务合同模板范本 技术... 国际技术服务合同模板一  甲方:________________  地址:_____________...
房地产合同管理台账范本 房地产... 合同管理台账范本:   某房地产开发有限公司合同管理台账
房地产顾问合同_房地产顾问合同... 房地产顾问合同范文1  根据《中华人民共和国律师暂行条例》第二条第一款的规定,______(简称甲方...
房地产项目合同_房地产项目合同... 房地产项目合同范文1  委托方:_______(以下简称甲方)  地址:_________  居间方...
房地产合作开发合同_房地产合作...  房地产合作开发合同范文1  甲方:   乙方:  根据《中华人名共和国合同法》及其他有关法律、法规...
Elastic之elastic... 一、Elastic介绍 Elastic有一条完整的产品线及解决方案:Elastics...
秋招面经系列,有人看嘛 小记:23年秋招的凄凉想必大家也有所耳闻,现在这个时候还在推荐转行互联网...
建筑合同范本-建筑装饰合同样本... 发包方(甲方):________________________承包方(乙方):__________...
建筑合同范本-建筑规划设计合同... 工程名称:_________工程地点:_________合同编号:_________(由设计人编填)...
建筑合同范本-土地租赁合同样本... 出租方:_________(以下简称甲方)承租方:_________(以下简称乙方)根据《中华人民共...
建筑合同范本-建筑安装合同样本... _________年_________月_________日,_________(简称甲方),与__...
建筑合同范本-民房建筑合同样本... 相关的合同范本·英文建筑合同·房屋建筑装修施工合同·建筑工程施工安全合同协议书·建筑安装施工合同·国...