更新记录
1.0.0(2026-11-05) 下载此版本
1.0.0
- 首个版本,功能可用
平台兼容性
pk-socket-pro TCP/UDP 双协议通信套件
TCP/UDP 双协议通信:粘包拆包(长度前缀 / 分隔符 / 定长)、心跳保活、指数退避重连、UDP 广播与 seq 应答匹配、连接状态机与关闭原因归一。
双层架构:JS 协议层(拆包 / 心跳 / 重连 / 应答,可在 Node 单测)+ 原生薄壳(Kotlin / Swift,只做 fd 收发与回调)。竞品痛点「安卓连上就断」「UDP 广播发得出收不回」「粘包没人管」全部在协议层根治。
5 分钟接入
import sk from '@/uni_modules/pk-socket-pro/js_sdk/index.js'
// 接原生通道(自定义基座里已集成了 PKSocketPro 原生模块)
const conn = sk.open({
protocol: 'tcp', host: '127.0.0.1', port: 9123,
framing: { strategy: 'length_prefix', opts: { lengthBytes: 4 } },
heartbeat: { data: 'ping', interval: 15000, deadFactor: 2.5 },
reconnect: { base: 1000, max: 30000, maxRetries: 10 }
})
conn.on('open', () => console.log('已连接'))
conn.on('message', (m) => console.log('收到', m.text)) // m.bytes 为原始 Uint8Array
conn.write('hello')
conn.close()
UTS 通道接入(推荐,跨端一致):
import sk from '@/uni_modules/pk-socket-pro/js_sdk/index.js'
import { createSocket } from '@/uni_modules/pk-socket-pro/utssdk/index.uts'
sk.open({ protocol: 'tcp', host, port, framing: { strategy: 'delimiter', opts: { delimiter: '\n' } },
_socketFactory: createSocket })
API 全表
| 方法 | 签名 | 说明 |
|---|---|---|
open |
open(opts) |
打开连接。返回 { ok };失败返回 { ok:false, error } |
write |
write(data, { queue }) |
发送。tcp 自动组帧;未连接入离线队列(queue:false 直接拒绝) |
writeBroadcast |
writeBroadcast(data, port) |
UDP 广播(需 broadcast.enabled) |
request |
await request(data, { ttl }) |
UDP 请求-应答:自动分配 seq,超时抛 E-SOCK-08 |
close |
close({ reason }) |
主动关闭(不重连),返回丢失的离线消息数 |
getState |
getState() |
idle/connecting/open/reconnecting/closing/closed/error |
getStats |
getStats() |
{ sent, received, reconnects, lastError, pending, queueSize, ... } |
on/once/off |
on(event, fn) |
订阅 open/message/close/error/reconnect/state/ack/timeout |
setChannelFactory |
setChannelFactory(fn) |
测试 / 自定义通道注入 |
reset |
reset() |
重置内部状态 |
拆包策略
| 策略 | 适用 | 说明 |
|---|---|---|
length_prefix |
二进制协议 | 首部 N 字节(默认 4)大端声明长度;天然解决粘包 / 半包 |
delimiter |
文本行协议 | 以分隔符(默认 \n)切分,余下残片留待下次 |
fixed |
定长报文 | 固定长度分块,payload 超长抛 E-SOCK-03 |
关闭原因(决定要不要自动重连)
close 事件携带归一后的 { reason, retry }:
| reason | 含义 | 是否重连 |
|---|---|---|
peer_closed |
对端关闭(含 code 1000) | ✅ |
timeout |
心跳假死 / 读写超时 | ✅ |
network_lost |
网络切换 / 无网络 | ✅ |
fd_invalid |
句柄失效(移动网络切换常见) | ✅ |
manual |
用户主动关闭 | ❌ |
error |
其它 | ❌ |
错误码
| 码 | 含义 |
|---|---|
| E-SOCK-01 | 非法状态迁移 |
| E-SOCK-02 | 拆包策略 / 参数非法 |
| E-SOCK-03 | 单帧超长 |
| E-SOCK-04 | seq 生成异常 |
| E-SOCK-05 | 定长编码 payload 超长 |
| E-SOCK-06 | 仅支持 tcp / udp |
| E-SOCK-07 | 通道未就绪(未打自定义基座 / 未连接就收发) |
| E-SOCK-08 | UDP 应答超时 |
| E-SOCK-09 | 网络丢失 |
| E-SOCK-10 | 当前环境 / 通道不支持该能力 |
真机验收清单(需你配合)
- [ ] 真机 TCP 连接后杀掉服务端 →
reconnecting事件触发,退避后重连成功 - [ ] 切 4G↔WiFi →
fd_invalid触发重连,业务无感 - [ ] UDP 广播:设备 A 广播,设备 B 收到并
request拿到ack - [ ] 高频率粘包(一次 recv 多帧)→ 逐条
message正确拆分 - [ ] 弱网半包(一次 recv 不足一帧)→ 缓冲至下个包补齐
体积说明
不内置任何第三方 so / SDK,原生壳纯 Kotlin / Swift 实现,UTS 通道零额外依赖,云打包不受影响。

收藏人数:
下载插件并导入HBuilderX
下载示例项目ZIP
赞赏(0)
下载 3
赞赏 0
下载 12744412
赞赏 1959
赞赏
京公网安备:11010802035340号