Socket.D 替代 http 协议像 Ajax 一样开发前端接口

我们在"前端接口"开发时,使用 socket.d 协议有什么好处:

  • 功能上可以替代 http 和原生 ws
  • 安全!安全!安全!现有的工具想抓包数据,难!难!难!(socket.d 是个新的二进制协议)

1、Socket.D 协议特点

  • 基于事件,每个消息都可事件路由
  • 所谓语义,通过元信息进行语义描述
  • 流关联性,有相关的消息会串成一个流
  • 语言无关,使用二进制输传数据(支持 tcp, ws, udp)。支持多语言、多平台
  • 断线重连,自动连接恢复
  • 多路复用,一个连接便可允许多个请求和响应消息同时运行
  • 双向通讯,单链接双向互听互发
  • 自动分片,数据超出 16Mb(大小可配置),会自动分片、自动重组(udp 除外)
  • 接口简单,是响应式但用回调接口

2、客户端示例代码

使用时,可以根据自己的业务对原生接口包装,进一步简化使用。

html 复制代码
<script src="js/socket.d.js"></script>
<script>
//创建单例
const clientSession = SocketD.createClient("sd:ws://127.0.0.1:8602/?u=a&p=2")
        .open();

//添加用户(加个内容类型,方便与 Mvc 对接)
const entity = SocketD.newEntity("{id:1,name:'noear'}").metaPut("Content-Type","text/json"),
clientSession.sendAndRequest("/user/add",  entity, reply=>{
    const rst = JSON.parse(reply.dataAsString());
    
    if(rst.code == 200){
        alert("添加成功!");
    }else{
        alert("添加失败");
    }
})
</script>

Socket.D 有三个发消息的接口:

接口 说明
send 像 websocket。多了事件与元信息
sendAndRequest 像 http
sendAndSubscribe 像 reactive stream 。多了事件与元信息

3、服务端示例代码

  • 原生接口风格
java 复制代码
public class Demo {
    public static void main(String[] args) throws Throwable {
        //创建监听器
        Listener listener = new EventListener().doOnOpen(s->{
            //鉴权
            if("a".equals(s.param("u")) == false){
                s.close();
            }
        }).doOn("/user/add", (s,m)->{
            if(m.isRequest()){
                s.reply(m, new StringEntity("{\"code\":200}"));
            }
        });
        
        //启动服务
        SocketD.createServer("sd:ws")
                .config(c -> c.port(8602))
                .listen(listener)
                .start();
    }
}
  • Mvc 接口风格

具体参考 solon 的集成效果:https://solon.noear.org/article/652

java 复制代码
//控制器
@Controller
public class HelloController {
    @Socket
    @Mapping("/hello/add")
    public Result hello(long id, String name) { //{code:200,...}
        return Result.succeed();
    }
}

4、开源仓库

相关推荐
彭世瑜8 分钟前
ts: TypeScript跳过检查/忽略类型检查
前端·javascript·typescript
FØund4049 分钟前
antd form.setFieldsValue问题总结
前端·react.js·typescript·html
Backstroke fish9 分钟前
Token刷新机制
前端·javascript·vue.js·typescript·vue
小五Five10 分钟前
TypeScript项目中Axios的封装
开发语言·前端·javascript
小曲程序11 分钟前
vue3 封装request请求
java·前端·typescript·vue
临枫54111 分钟前
Nuxt3封装网络请求 useFetch & $fetch
前端·javascript·vue.js·typescript
前端每日三省12 分钟前
面试题-TS(八):什么是装饰器(decorators)?如何在 TypeScript 中使用它们?
开发语言·前端·javascript
小刺猬_98513 分钟前
(超详细)数组方法 ——— splice( )
前端·javascript·typescript
渊兮兮14 分钟前
Vue3 + TypeScript +动画,实现动态登陆页面
前端·javascript·css·typescript·动画
鑫宝Code15 分钟前
【TS】TypeScript中的接口(Interface):对象类型的强大工具
前端·javascript·typescript