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

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

1、Socket.D 协议特点

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

2、客户端示例代码

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

<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、服务端示例代码

  • 原生接口风格
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

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

4、开源仓库

Socket.D 替代 Http 协议像 Ajax 一样开发前端接口的更多相关文章

  1. [深入浅出WP8.1(Runtime)]Socket编程之UDP协议

    13.3 Socket编程之UDP协议 UDP协议和TCP协议都是Socket编程的协议,但是与TCP协议不同,UDP协议并不提供超时重传,出错重传等功能,也就是说其是不可靠的协议.UDP适用于一次只 ...

  2. 配置chrome支持本地(file协议)ajax请求

    将html代码拖拽进入chrome通过file协议浏览时,发送的ajax请求本地文件,会报跨域错误. XMLHttpRequest cannot load file:///E:/webs/extJS/ ...

  3. Socket层上的协议

    Socket层上的协议指的数据传输的格式 HTTP协议 传输格式:假设:这是假设,实际http的格式不是这样的. http1.1,content-type:multipart/form-data,co ...

  4. HTTP协议、Ajax请求

    今天这篇文章呢,主要讲的就是关于HTTP协议.Ajax请求以及一些相关的小知识点.虽然内容不算多,可是是很重点的东西~ HTTP协议 1. http:超文本传输协议.简单.快速.灵活.无状态.无连接. ...

  5. 网络编程—网络基础概览、socket,TCP/UDP协议

    网络基础概览 socket概览 socket模块—TCP/UDP的实现 TCP/UDP总结 网络基础概览 osi七层协议各层主要的协议 # 物理层传输电信号1010101010 # 数据链路层,以太网 ...

  6. Python之路(第三十篇) 网络编程:socket、tcp/ip协议

    一.客户端/服务器架构 1.硬件C/S架构(打印机) 打印机作为一个服务端,电脑连接打印机进行打印 2.软件C/S架构 互联网中处处是C/S架构 如谷歌网站是服务端,你的浏览器是客户端(B/S架构也是 ...

  7. socket编程的网络协议

    "我们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如果没有应用层,便无法识别数据内容" TCP/IP只是一个协议栈,就像程序运行一样,必须要实现运行,同时还要 ...

  8. JNI的又一替代者—使用JNR访问Java外部函数接口(jnr-ffi)

    1. JNR简单介绍 继上文“JNI的替代者—使用JNA访问Java外部函数接口”,我们知道JNI越来越不受欢迎,JNI是编写Java本地方法以及将Java虚拟机嵌入本地应用程序的标准编程接口.它管理 ...

  9. 答题小程序开发之socket编程 微信小程序答题 直播答题开发 直播弹幕使用web socket编程

    最近有一个项目很火,那就是直播答题的,接到公司的这个任务,开发直播答题的聊天室功能.在线的人相互聊天.之前做过类似的,当时都是使用的ajax轮询的,这种非常的耗费服务器.所以这次就开始使用socket ...

  10. 判断手机端用户打开页面时是android还是ios,并将判断结果通过ajax返回给url接口,传递回去

    首先判断页面是android还是ios,然后利用ajax将结果通过接口url返回回去,记录到log日志中,以统计android和ios用户访问该页面的数量(数据统计) <script type= ...

随机推荐

  1. 「codeforces - 585E」Present for Vitalik the Philatelist

    link. 设 \(\displaystyle f(x) = \# S', s.t. S' \subseteq S, S' \neq \varnothing, \gcd(S') = x\),\(g(x ...

  2. 常用设计模式(Java)

    目录 设计模式引入 1. 什么是设计模式 2. 学习设计模式的意义 3. 设计模式的基本要素 4. OOP七大原则 1.单例模式 1. 饿汉式单例 2. 懒汉式单例 3. 内部类实现单例 4. 反射会 ...

  3. Java 21的StringBuilder和StringBuffer新增了一个repeat方法

    发现Java 21的StringBuilder和StringBuffer中多了repeat方法: /** * @throws IllegalArgumentException {@inheritDoc ...

  4. 关于LUN的归属控制器

    ALUA (Asymmetric logic Unit Access)  架构 在ALUA (Asymmetric logic Unit Access)  架构中,LUN有归属控制器,客户在创建LUN ...

  5. c# 光学三原色混合,颜色叠加-dong

    东的备注: 光的三原色:红.绿.蓝 红+绿=黄 红+蓝=品红 蓝+绿=青 红+绿+蓝=白 无颜色为黑 下看代码 Bitmap image1 = new Bitmap(500, 500);//红 Bit ...

  6. Session概述(选自WebX)

    http://openwebx.org/docs/Webx3_Guide_Book.html#d0e9084 8.1. Session概述 8.1.1. 什么是Session HTTP协议是无状态的, ...

  7. PostgreSQL 序列(Sequence)

    基本操作 --新增序列 CREATE SEQUENCE xxx_id_seq INCREMENT 1 -- 一次加多少 MINVALUE 1 -- 最小值 START 1 --从多少开始 CACHE ...

  8. R!!C!!E!!

    打开页面只有一句话提示,提示有敏感信息泄露 这里的话使用dirresearch扫描网站结构 在这里我们可以看到响应码正常且有反应的多数都是.git文件 这里我们使用Git源码下载的脚本下载Git源码 ...

  9. 2023 11月 AtCoder 做题记录

    AGC037F 题目传送门 第一步,考虑判断序列是否合法. 通过对于属于等级 $k$ 的定义将定义反推:$s$ 中最小的元素 $x$,找到所有 $x$ 的连续段.设一个连续段的长度是 $len$,若 ...

  10. 微信小程序记住密码,让登录解放双手

    密码是用户最重要的数据,也是系统最需要保护的数据,我们在登录的时候需要用账号密码请求登录接口,如果用户勾选记住密码,那么下一次登录时,我们需要将账号密码回填到输入框,用户可以直接登录系统.我们分别对这 ...