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

相关推荐
hackeroink1 小时前
【2024版】最新推荐好用的XSS漏洞扫描利用工具_xss扫描工具
前端·xss
迷雾漫步者3 小时前
Flutter组件————FloatingActionButton
前端·flutter·dart
向前看-3 小时前
验证码机制
前端·后端
燃先生._.4 小时前
Day-03 Vue(生命周期、生命周期钩子八个函数、工程化开发和脚手架、组件化开发、根组件、局部注册和全局注册的步骤)
前端·javascript·vue.js
高山我梦口香糖5 小时前
[react]searchParams转普通对象
开发语言·前端·javascript
m0_748235245 小时前
前端实现获取后端返回的文件流并下载
前端·状态模式
m0_748240256 小时前
前端如何检测用户登录状态是否过期
前端
black^sugar6 小时前
纯前端实现更新检测
开发语言·前端·javascript
njnu@liyong7 小时前
图解HTTP-HTTP报文
网络协议·计算机网络·http