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 小时前
Vue3 中的 defineExpose 完全指南
前端·javascript·vue.js
泯泷8 小时前
阶段一:从 0 看懂 JSVMP 架构,先在脑子里搭出一台最小 JSVM
前端·javascript·架构
华洛9 小时前
利好打工人,openclaw不是企业提效工具,而是个人助理
前端·javascript·产品经理
xkxnq9 小时前
第六阶段:Vue生态高级整合与优化(第93天)Element Plus进阶:自定义主题(变量覆盖)+ 全局配置与组件按需加载优化
前端·javascript·vue.js
A黄俊辉A10 小时前
vue css中 :global的使用
前端·javascript·vue.js
灵感__idea11 小时前
Hello 算法:复杂问题的应对策略
前端·javascript·算法
chushiyunen11 小时前
python中的内置属性 todo
开发语言·javascript·python
soso196812 小时前
JavaScript性能调优实战案例
javascript
Moment13 小时前
前端工程化 + AI 赋能,从需求到运维一条龙怎么搭 ❓❓❓
前端·javascript·面试
Joker Zxc13 小时前
【前端基础(Javascript部分)】6、用JavaScript的递归函数和for循环,计算斐波那契数列的第 n 项值
开发语言·前端·javascript