基于事件和语义消息流的网络应用层协议。
有用户说,“Socket.D 之于 Socket,尤如 Vue 之于 Js、Mvc 之于 Http”。支持 tcp, udp, ws, kcp 传输。
主要特性
- 基于事件,每个消息都可事件路由
- 所谓语义,通过元信息进行语义描述
- 流关联性,来回相关的消息会串成一个流
- 语言无关,使用二进制输传数据(支持 tcp, ws, udp)。支持多语言、多平台
- 断线重连,自动连接恢复
- 多路复用,一个连接便可允许多个请求和响应消息同时运行
- 双向通讯,单链接双向互听互发
- 自动分片,数据超出 16Mb(大小可配置),会自动分片、自动重组(udp 除外)
- 接口简单,是响应式但用回调接口
Java 适配更新(兼容 server 与 android):
- 新增 SendStream,RequestStream,SubscribeStream 三个流接口。强化流接口体验
- 添加 基于流接口,实现数据上传与下载的进度通知机制
- 添加 基于流接口,实现异常通知机制
- 调整 send 接口体验,基于流接口改造
- smartsocket 升为 1.5.41
接口变化 | 描述 |
---|---|
旧:session.send(event, entity) 新: session.send(event, entity) -> SendStream |
发送 |
旧:session.sendAndRequest(event, entity, timeout?, callback) 新: session.sendAndRequest(event, entity, timeout?) -> RequestStream |
发送并请求(要求1个答复) |
旧:session.sendAndSubscribe(event, entity, timeout?, callback) 新: session.sendAndSubscribe(event, entity, timeout?) -> SubscribeStream |
发送并订阅(可接收多个答复) |
Javascript 适配更新(兼容 h5, uniapp, node.js):
- 新增 SendStream,RequestStream,SubscribeStream 三个流接口。强化流接口体验
- 添加 基于流接口,实现数据上传与下载的进度通知机制
- 添加 基于流接口,实现异常通知机制
- 调整 send 接口体验,基于流接口改造
//发送
session.send("/demo/hello", SocketD.newEntity("hi"));
//发送,且获取发送进度(如果有大数据发送,又需要显示进度)
session.send("/demo/upload", SocketD.newEntity(file)).thenProgress((isSend, val, max)=>{
if(isSend){
//获取发送进度
}
});
//发送并请求,且同步等待
let reply = session.sendAndRequest("/demo/hello", SocketD.newEntity()).await();
//发送并请求,且取接收进度(如果有大数据获取,又需要显示进度)
session.sendAndRequest("/demo/download", SocketD.newEntity()).thenProgress((isSend, val, max)=>{
if(!isSend){
//获取接收进度
}
}).thenReply(reply=>{
//异步获取答复
}).thenError(err=>{
//如果有出错?
});
//发送并订阅
let entity = SocketD.newEntity().metaPut("videoId","1").meatPut("start","5").meatPut("size","5");
session.sendAndSubscribe("/demo/stream", entity).thenReply(reply=>{
//异步获取答复(会多次回调)
})
视频效果:
- for H5
- https://www.bilibili.com/video/BV1ck4y197BV/
- for UniAPP
- https://www.bilibili.com/video/BV1T94y1T7sp/
代码仓库:
- https://gitee.com/noear/socketd
- https://github.com/noear/socketd
官网:
- https://socketd.noear.org