Protobuf在TypeScript中的64位长整型精度问题

一直以来,在 JavaScript 中表示数值的只有 Number 这种以 64 位浮点形式存储的类型, 是不存在类似 Long 这种64位的长整形,这就会造成后端传输来的长整型数据到了前端出现精度丢失的情况: let n1 = 177777777777777777; console.log(n1) // 177777777777777800 遗憾的是在 TypeScript 中也没有 Long 这样的长整型,但是 Node.JS 中的,有许多十分优秀的 modules ,其中 long这个第三方 module 使用了一个 class ,封装了两个 32 bit 有符号 number … “Protobuf在TypeScript中的64位长整型精度问题”

Read More

用TypeScript实现对WebSocket的封装-Part-2

在驱动接口声明完成后,实现功能部分会比较繁复,需要考虑保活/断线重连/消息丢失重发/消息去重,等大部分弱网络下的问题,这是为了方便上层的调用,上层无需关心底层驱动的实现. 实现`chat-ws.ts`: “`typescript ///<reference path="./chat-ws.d.ts" /> import { IntervalTimer, ETimerEventType as ETETP } from './chat-timer'; @Injectable export class ChatWSProvider implements IChatWSProvider { construtor(){ //… } private logger: ILogger = null; private remoteAddr: string; private webSocket: … “用TypeScript实现对WebSocket的封装-Part-2”

Read More

用TypeScript实现对WebSocket的封装-Part-1

在 node.js 的第三方 module 中提供了许多优质的 WebSocket 驱动,比如 ws 和 Socket.IO,不过 TypeScript 内置库也已经实现了 WebSocket 驱动.因此可以无需添加第三方 WebSocket 库. 得益于 TypeScript 强大语法的支持,因此代码可以像编译型语言那样先对用到的类型进行声明,然后对接口实现定义. 先前项目前端使用 TypeScript,因此使用了 TypeScript 实现了WebSocket的聊天驱动.这些天来总结了项目关于聊天驱动底层的一些经验与问题,故记录下. 废话不说. 首先定义通知上层的事件回调接口,这些事件通常是收到 ws 数据或 ws 异常后触发的,因此可以按照功能分为: 登录事件回调 : type FnOnLoginCallback,来自登录成功后的事件回调声明 登出事件回调 : … “用TypeScript实现对WebSocket的封装-Part-1”

Read More