开源项目
bit-net:一套 API,抹平小游戏平台的网络请求差异
跨平台网络通信库,封装 HTTP 请求和 WebSocket 连接,统一浏览器、原生与微信/支付宝/字节跳动小游戏平台的网络 API 差异。
bit-net:一套 API,抹平小游戏平台的网络请求差异
它解决什么问题
同时发微信、支付宝、字节跳动小游戏的项目都知道这个坑:微信用 wx.request 和 wx.connectSocket,支付宝是 my.request 和 my.connectSocket,字节跳动又是另一套命名。同样一次登录请求,要写三份平台判断代码,还要留意各平台在超时、错误码上的细微差异。
bit-net 把这些差异封装掉,业务代码只认 HttpManager 和 Socket 两个接口,底层跑在哪个平台不用关心。
安装
npm install @gongxh/bit-net
零外部依赖。
HTTP 请求
支持 GET/POST/PUT/HEAD,响应类型可以是 json、text、arraybuffer:
import { HttpManager, IHttpEvent } from '@gongxh/bit-net';
const loginEvent: IHttpEvent = {
name: 'login',
onComplete: (response) => {
console.log('登录成功:', response.data);
},
onError: (response) => {
console.log('登录失败:', response.error);
},
};
HttpManager.post(
'https://api.example.com/login',
{ username: 'test', password: '123456' },
'json',
loginEvent,
);
HttpManager.get('https://api.example.com/userinfo', { userId: 123 }, 'json', loginEvent);
除了给每个请求单独传回调,也可以监听 HttpManager.HttpEvent 这个全局事件,一个地方统一处理所有请求的响应——比较适合想做全局 loading 遮罩或者统一错误提示的场景。
WebSocket
import { Socket } from '@gongxh/bit-net';
const socket = new Socket('wss://game-server.com/ws', {
binaryType: 'arraybuffer',
timeout: 5000,
});
socket.onopen = () => console.log('连接成功');
socket.onmessage = (data) => console.log('收到消息:', data);
socket.onclose = (code, reason) => console.log('连接断开:', code, reason);
socket.onerror = (err) => console.log('连接错误:', err);
socket.send('Hello Server'); // 发文本
socket.sendBuffer(buffer); // 发二进制,常用于 ProtoBuf 协议
socket.close(1000, '正常关闭');
binaryType 设成 arraybuffer 是游戏里最常用的选择,配合 ProtoBuf 做二进制协议传输,比纯文本 JSON 省流量。
避坑提醒
- 不同平台对同时存在的 WebSocket 连接数、单次请求体大小都有各自的限制(尤其是小游戏平台),压测的时候记得针对目标平台单独验证,不要只在浏览器环境测完就当作所有平台都没问题。
- HTTP 请求的超时时间要按平台网络状况留够余量,小游戏用户的网络环境普遍比 Web 端差,用桌面浏览器测出来的超时阈值放到小游戏上可能偏紧。
IHttpEvent的onError和全局HttpEvent不是互斥的,两种方式可以同时生效,注意别在两处重复写了同一个错误提示逻辑。
项目信息
- GitHub: https://github.com/gongxh0901/bit-framework/tree/main/bit-net
- npm: @gongxh/bit-net
- 许可证: MIT License
热更新模块 bit-hotupdate 下载资源清单和资源包就是用它做底层网络请求的,两者搭配天然契合。