用 Socket.D 替代原生 WebSocket 做前端开发
socket.d.js 是基于 websocket 包装的 socket.d 协议的实现。就是用 ws 传输数据,但功能更强大。
| 功能 | 原生 websocket | socket.d | 说明 |
|---|---|---|---|
| listen | 有 | 有 | 监听消息 |
| send | 有 | 有 | 发消息 |
| sendAndRequest | 无 | 有 | 发消息并接收一个响应(类似于 http) |
| sendAndSubscribe | 无 | 有 | 发消息并接收多个响应(也叫订阅) |
| event(or path) | 无 | 有 | 消息有事件或路径(可对消息,进行业务路由) |
| meta(or header) | 无 | 有 | 消息有元信息或头信息(可为数据,标注业务语义) |
| 自动心跳 | 无 | 有 | |
| 断开后自动重链 | 无 | 有 |
下面感受下开发方面的差异!
1、客户端示例代码
使用时,可以根据自己的业务对原生接口包装,进一步简化使用。
<script src="js/socket.d.js"></script>
<script>
async function init(){//构建事件监听const eventListener = await SocketD.newEventListener().doOnMessage((s,m)=>{//监听所有消息(可能不需要)}).doOn("/im/user.upline", (s,m)=>{ //事件的应用//监听用户上线let user_id = m.meta("user_id");}).doOn("/im/user.downline", (s,m)=>{//监听用户下线let user_id = m.meta("user_id"); //元信息的应用});//创建单例window.clientSession = SocketD.createClient("sd:ws://127.0.0.1:8602/?u=a&p=2").listen(eventListener).open();
}function join(){clientSession.sendAndRequest("/user/join", SocketD.newEntity()).thenReply(r->{//加入成功});
}init();
</script>
Socket.D 有三个发消息的接口:
| 接口 | 说明 |
|---|---|
| send | 像 websocket。多了事件与元信息属性 |
| sendAndRequest | 像 http |
| sendAndSubscribe | 像 reactive stream 。多了事件与元信息属性 |
2、服务端示例代码(用 java 演示)
public class Demo {public static void main(String[] args) throws Throwable {List<Session> userSessions = new ArrayList<Session>();//创建监听器Listener listener = new EventListener().doOnOpen(s->{//鉴权if("a".equals(s.param("u")) == false){s.close();}else{//加入用户表s.attrPut("user_id", s.param("u"));userSessions.add(s);}}).doOn("/user/join", (s,m)->{if(m.isRequest()){s.reply(m, new StringEntity());}for(Session s1: userSessions){//告诉所有用户,有人上线s1.send("/im/user.upline", new StringEntity().metaPut("user_id"), s.attr("userId"));}});//启动服务SocketD.createServer("sd:ws").config(c -> c.port(8602)).listen(listener).start();}
}
3、Socket.D 是什么东东?
Socket.D 是一个基于“事件”和“语义消息”“流”的网络应用层协议(听起来好像很 ao 口)。支持 tcp, udp, ws, kcp 传输(有各种不同语言的实现)。有用户说,“Socket.D 之于 Socket,尤如 Vue 之于 Js、Mvc 之于 Http”。
协议之所有强大,有三个关键基础因素:
- 事件
- 语义消息
- 流
它的帧码结构:
[len:int][flag:int][sid:str(<64)][\n][event:str(<512)][\n][metaString:str(<4k)][\n][data:byte(<16m)]
因为是应用层协议,所以可以建立在任意传输层协议之上。比如 websocket。
4、开源仓库
- github: https://github.com/noear/socket.d
- gitee: https://gitee.com/noear/socket.d
相关文章:
用 Socket.D 替代原生 WebSocket 做前端开发
socket.d.js 是基于 websocket 包装的 socket.d 协议的实现。就是用 ws 传输数据,但功能更强大。 功能原生 websocketsocket.d说明listen有有监听消息send有有发消息sendAndRequest无有发消息并接收一个响应(类似于 http)sendAndSubscribe无…...
Transformer架构和对照代码详解
1、英文架构图 下面图中展示了Transformer的英文架构,英文架构中的模块名称和具体代码一一对应,方便大家对照代码、理解和使用。 2、编码器 2.1 编码器介绍 从宏观⻆度来看,Transformer的编码器是由多个相同的层叠加⽽ 成的,每个…...
大数的乘法
题目描述 求两个不超过100位的非负整数的乘积。 输入 有两行,每行是一个不超过100位的非负整数,没有多余的前导0。 输出 一行,相乘后的结果。 样例输入 Copy 123456789 123456789样例输出 Copy 15241578750190521 代码实现࿱…...
年度征文 | 机器学习之心的2023
机器学习之心的2023 2023是极其复杂的一年。 生活上,养了很多宠物。 工作上,写了不少博客。 虽然遇见更多让人不开心的事情,但总体还是美好的。 愿大家新的一年健康平安,生活幸福! 机器学习是一项庞大的工程࿰…...
13.Kubernetes应用部署完整流程:从Dockerfile到Ingress发布完整流程
本文以一个简单的Go应用Demo来演示Kubernetes应用部署的完整流程 1、Dockerfile多阶段构建 Dockerfile多阶段构建 [root@docker github]# git clone https://gitee.com/yxydde/http-dump.git [root@docker github]# cd http-dump/ [root@docker http-dump]# cat Dockerfile …...
多年后再用TB,谈项目管理工具
背景 最近启动一个小项目,多年未曾使用项目管理工具,依稀记得使用过Basecamp,Tower,worktitle,teambition等等,当然还有mantis,vs project等等。于是随便翻阅找个用,不小心翻了TB的牌子,竟然已是阿里旗下的…...
Spark MLlib ----- ALS算法
补充 在谈ALS(Alternating Least Squares)之前首先来谈谈LS,即最小二乘法。LS算法是ALS的基础,是一种数优化技术,也是一种常用的机器学习算法,他通过最小化误差平方和寻找数据的最佳匹配,利用最小二乘法寻找最优的未知数据,保证求的数据与已知的数据误差最小。LS也被用…...
ubuntu桥接方式上网
vmvare:VMware Workstation 17 Pro ubuntu: Ubuntu 14.04.6 LTS window10 下面是我的电脑配置 下面是ubuntu虚拟机的配置 vi /etc/network/interfaces 下面的gateway就是window -ipconfig 截图里的默认网关 auto lo iface lo inet loopbackauto eth0 iface eth0 inet stat…...
收到的字符串写入xml并且将这个xml写入.zip文件中
文章目录 1、将数据写入xml文件WriteToXmlFile2、将xml文件写入zip压缩文件AddToZip3、组合起来4、使用到的头文件和动态库 1、将数据写入xml文件WriteToXmlFile void CSMSLoginDlg::WriteToXmlFile(const std::string& responseData, const std::string& xmlFileName…...
【读书笔记】《白帽子讲web安全》跨站脚本攻击
目录 前言: 第二篇 客户端脚本安全 第3章 跨站脚本攻击(XSS) 3.1XSS简介 3.2XSS攻击进阶 3.2.1初探XSS Payload 3.2.2强大的XSS Payload 3.2.2.1 构造GET与POST请求 3.2.2.2XSS钓鱼 3.2.2.3识别用户浏览器 3.2.2.4识别用户安装的软…...
第九节 初始化项目
系列文章目录 目录 系列文章目录 前言 操作方法 总结 前言 初始化项目,导入默认reset.scss 、variables.scss及mixins.scss等并修改main.js引入样式 操作方法 将默认样式表文件导入到项目。样式文件已经放到资源里请自行下载(...
【论文阅读】深度学习中的后门攻击综述
深度学习中的后门攻击综述 1.深度学习模型三种攻击范式1.1.对抗样本攻击1.2.数据投毒攻击1.3.后门攻击 2.后门攻击特点3.常用术语和标记4.常用评估指标5.攻击设置5.1.触发器5.1.1.触发器属性5.1.2.触发器类型5.1.3.攻击类型 5.2.目标类别5.3.训练方式 1.深度学习模型三种攻击范…...
Spring Boot中加@Async和不加@Async有什么区别?设置核心线程数、设置最大线程数、设置队列容量是什么意思?
在 Spring 中,Async 注解用于将方法标记为异步执行的方法。当使用 Async 注解时,该方法将在单独的线程中执行,而不会阻塞当前线程。这使得方法可以在后台执行,而不会影响主线程的执行。 在您提供的代码示例中,a1() 和…...
Vue_00001_CLI
初始化脚手架 初始化脚手架步骤: 第一步(仅第一次执行):全局安装vue/cli。 命令:npm install -g vue/cli 第二步:切换到要创建项目的目录,然后使用命令创建项目。 命令:vue creat…...
kubernetes ResourceQuotas Limits(资源配额)
开头语 写在前面:如有问题,以你为准, 目前24年应届生,各位大佬轻喷,部分资料与图片来自网络 内容较长,页面右上角目录方便跳转 简介 当多个用户或团队共享具有固定节点数目的集群时,人们会…...
【ARMv8架构系统安装PySide2】
ARMv8架构系统安装PySide2 Step1. 下载Qt资源包Step2. 配置和安装Qt5Step3. 检查Qt-5.15.2安装情况Step4. 安装PySide2所需的依赖库Step5. 下载和配置PySide2Step6. 检验PySide2是否安装成功 Step1. 下载Qt资源包 if you need the whole Qt5 (~900MB): wget http://master.qt…...
ECMAScript6详解
ECMAScript 6,也被称为 ES6 或 ECMAScript 2015,是 JavaScript 编程语言标准的一个主要更新。它于 2015 年正式发布,并带来了许多新特性和改进,使得 JavaScript 开发更加现代化和高效。下面是 ES6 的一些关键特性的详解࿱…...
[C#]使用PaddleInference图片旋转四种角度检测
官方框架地址】 https://github.com/PaddlePaddle/PaddleDetection.git 【算法介绍】 PaddleDetection 是一个基于 PaddlePaddle(飞桨)深度学习框架的开源目标检测工具库。它提供了一系列先进的目标检测算法,包括但不限于 Faster R-CNN, Ma…...
stable diffusion 基础教程-提示词之光的用法
基图 prompt: masterpiece,best quality,1girl,solo,looking at viewer,brown hair,hair between eyes,bangs,very long hair,red eyes,blush,bare shoulders,(white sundress),full body,Negative prompt: EasyNegative,badhandv4,nsfw,lowres,bad anatomy,bad hands,text…...
第9课 回声抑制(AEC+AGC+ANS)的实现
在第8课中,我们将推流端与播放端合并实现了一对一音视频聊天功能,一切看起来还不错。但在实际使用时,会遇到一个烦心的问题:说话时会听到比较大的回声,影响正常使用。所以,这节课我们来重点解决这个问题。 …...
售价99美元小工具Cricut Joy 2,功能实用但新手引导待改进!
产品初印象这款售价99美元的小工具并不完美,但它的功能和应用程序提供的模板正是用户所需要的。照顾他人、自我批评以及心理健康方面的困扰,让用户很难再像过去那样摆弄和涂鸦,然而Cricut Joy 2却让人心动不已。当有创作的心情时,…...
2026年简易操作安装Hermes Agent/OpenClaw Token Plan全流程解析大全
2026年简易操作安装Hermes Agent/OpenClaw Token Plan全流程解析大全。OpenClaw作为阿里云生态下新一代的开源AI自动化代理平台,曾用名Moltbot/Clawdbot,凭借“自然语言交互自动化任务执行大模型智能决策”的核心能力,正在重构个人与企业的工…...
【NotebookLM音频黑科技深度解析】:20年AI产品经理亲测的5大颠覆性功能与3个未公开技巧
更多请点击: https://intelliparadigm.com 第一章:NotebookLM Audio Overview NotebookLM Audio 是 Google 推出的实验性语音增强功能,深度集成于 NotebookLM 平台,旨在将用户上传的 PDF、网页文本等资料转化为可交互的语音知识体…...
ECharts 数据可视化交互实战:从 dataZoom 到 roam 的缩放功能深度解析
1. 为什么需要数据缩放功能? 我第一次用ECharts做数据可视化时,遇到了一个很头疼的问题:当数据量特别大时,图表会变得特别拥挤,根本看不清细节。比如展示一整年的股票数据,密密麻麻的折线挤在一起…...
AI工程化实战:基于Python工具箱构建生产级AI服务
1. 项目概述:一个AI驱动的Python开发工具箱 最近在GitHub上看到一个挺有意思的项目,叫“antarys-ai/python”。光看名字,你可能会觉得这又是一个普通的Python库或者某个AI框架的封装。但当我深入进去,发现它的定位其实相当独特&am…...
GitHub 开源育儿知识库:技术型父母如何用 Awesome List 构建科学育儿体系
1. 项目概述:一个为新手父母量身定制的技能宝库当一个小生命降临,新手父母们常常会陷入一种既幸福又焦虑的复杂情绪中。幸福自不必说,那份焦虑则大多源于“未知”——面对一个不会说话、只会用哭声表达一切的小家伙,如何判断他是饿…...
3分钟快速上手:VinXiangQi象棋连线工具的免费AI助手终极指南
3分钟快速上手:VinXiangQi象棋连线工具的免费AI助手终极指南 【免费下载链接】VinXiangQi Xiangqi syncing tool based on Yolov5 / 基于Yolov5的中国象棋连线工具 项目地址: https://gitcode.com/gh_mirrors/vi/VinXiangQi VinXiangQi是一款基于YOLOv5深度学…...
5分钟上手Efficient-KAN:高效Kolmogorov-Arnold网络实战指南
5分钟上手Efficient-KAN:高效Kolmogorov-Arnold网络实战指南 【免费下载链接】efficient-kan An efficient pure-PyTorch implementation of Kolmogorov-Arnold Network (KAN). 项目地址: https://gitcode.com/GitHub_Trending/ef/efficient-kan 还在为传统神…...
用好外勤数据,一年能帮你省下多少管理成本?
很多公司买外勤软件的初衷很简单:知道业务员在哪里,有没有去客户那边。打卡、定位、签到——这三件事做到了,觉得系统就发挥作用了。 一年过去,后台积累了几万条拜访记录、几千个停留点位、每个人每天的行动轨迹。这些数据安静地躺…...
基于 Harmony6.0 的优惠聚合应用实战:Flutter 页面构建与高质感 UI 设计解析
基于 Harmony6.0 的优惠聚合应用实战:Flutter 页面构建与高质感 UI 设计解析 前言 随着 HarmonyOS NEXT 与 Harmony6.0 生态逐渐成熟,越来越多开发者开始关注鸿蒙平台上的跨端开发方案。相比传统 Android 应用开发,Harmony6.0 更强调分布式能…...
