0.0.7 • Published 3 years ago

owork.connect v0.0.7

Weekly downloads
-
License
MIT
Repository
-
Last release
3 years ago

owork.connect

介绍

基于数据传输协议封装的客户端连接工具, 数据采用protobuf序列化, 内置websocket实现.

数据传输协议

定义说明
传输方式使用二进制传输
一个数据包消息类型(ushort,2个字节)+后面消息体长度(int,4个字节)+消息体二进制数据
消息类型为ushort类型,采用低位在前的方式转为byte[]比如消息类型ushort值为10001,二进制为00100111 00010001存储为byte[]={00010001, 00100111}即为:{17, 39}
消息体长度为int类型,转换方式同消息类型

安装

npm i --save owork.connect

依赖

除了npm包依赖protobufjs之外, 还依赖外部实现:

./define/external.*.d.ts 需要外部实现的功能定义在这里了, 为了排除环境因素的设计

比如抽出ZWebsocket的定义,使用时可以根据不同的环境进行不同的定义,比如微信小程序,可以用微信的websocket类进行实现,H5就用原生的实现

./external/external.h5. .js 为h5环境下的一套实现,可以参考使用 ./external/external.node. .js 为h5环境下的一套实现,可以参考使用

使用

Client

使用工厂来创建不同实现的客户端:

websocket作为客户端:
ClientFactory.buildWebSocketClient()

ProtobufHelper

封装数据传输协议的序列化/反序列化操作, 以及一些拓展功能

1. pbjs: npm包,用来生成对应的proto类文件,自行百度资料

2. 消息类型码映射为proto类

2.1. 可自行实现类型码到proto类型的映射关系
var protobufHelper = new ProtobufHelper(null, "proto里的包名",
    (op) => 类型码op对应proto里的类, window或者global);
2.2 也可用 owork.connect.buildproto 生成类型码的TS/JS类文件(仅支持windows)

websocket例子:

./test/websocket.js

搭配proto文件使用:

proto生成静态js的方式(推荐)

用参数: -t static-module -w commonjs

pbjs --no-create --no-verify --no-convert -t static-module -w commonjs -o ./输出.js ./输入.proto

nodejs环境的使用方式:

import root from "./输出.js"

var protobufHelper = new ProtobufHelper(root, "proto里的命名空间" , 
    (op) => MessageTypeCodes.CodeToName["Op_" + op], globalThis);

web环境的使用方式:

<script src="protobuf.min.js"></script>
<script src="输出.js"></script>
<script src="ProtobufHelper.js"></script>
<script>
//web的环境会自动注册到全局,所以第一个参数传null,ProtobufHelper会自动去识别
var protobufHelper = new ProtobufHelper(null, "proto里的命名空间" , 
    (op) => MessageTypeCodes.CodeToName["Op_" + op], globalThis);
</script>

动态解析proto,或者json解析的方式

动态解析:

protobuf.load("输入.proto", function(err, root) {
    //用root传入ProtobufHelper构造的第一个参数
});

json解析方式1:

protobuf.load("输入.json", function(err, root) {
    //用root传入ProtobufHelper构造的第一个参数
});

json解析方式2:

var jsonDescriptor = require("./输入.json");
//需要开启resolveJsonModule
//或者将pbjs生成的json内容加个前缀:"export const json=",然后生成的json改成js,采用模块化方式加载这个json对象
var root = protobuf.Root.fromJSON(jsonDescriptor);
//同样用这个root传入ProtobufHelper构造的第一个参数

更多请参考protobufjs官方文档: https://github.com/protobufjs/protobuf.js

更新日志

  • V0.0.7 默认改用编译好的js,同时提供各模块的声明文件
  • V0.0.6 ProtobufHelper全局注册使用globalThis作为默认值,补充sendRpc中的RpcId可用Long类型,将root开放传参,适用于多种环境
  • V0.0.5 补充源码地址
  • V0.0.4 分离命令行工具,减少依赖
  • V0.0.3 命令行工具升级,生成消息类型码js文件时会判断导出
  • V0.0.2 完成代码结构的重构,具备直接使用的能力,并包含单元测试(使用示例)
  • V0.0.1 初次上传的版本,基本功能,但代码零散

源码

https://gitee.com/fengssy/owork.connect

0.0.7

3 years ago

0.0.6

3 years ago

0.0.3

3 years ago

0.0.2

3 years ago

0.0.5

3 years ago

0.0.4

3 years ago

0.0.1

3 years ago