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、开源仓库

相关推荐
你听得到118 分钟前
Flutter - 手搓一个日历组件,集成单日选择、日期范围选择、国际化、农历和节气显示
前端·flutter·架构
风清云淡_A15 分钟前
【REACT18.x】CRA+TS+ANTD5.X封装自定义的hooks复用业务功能
前端·react.js
@大迁世界17 分钟前
第7章 React性能优化核心
前端·javascript·react.js·性能优化·前端框架
前端Hardy32 分钟前
HTML&CSS:惊艳!科技感爆棚的登录页面代码解析
前端·javascript·html
我是哈哈hh44 分钟前
【AJAX项目】黑马头条——数据管理平台
前端·javascript·ajax·前端框架·axios·proxy模式
高端章鱼哥1 小时前
分享一个 MySQL binlog 分析小工具
前端
Ronin-Lotus1 小时前
上位机知识篇---AJAX
前端·javascript·ajax
Rika1 小时前
手写mini-vue之后,我写了一份面试通关手册
前端·vue.js
我想说一句1 小时前
使用React开发拉布布旅游智能聊天机器人的实践
前端·前端框架
wwy_frontend1 小时前
积累:04-VUE2
前端