Socket.D 协议的开发缘由
为什么搞个新协议?
2021年时,想为 Solon 生态 提供一种 MVC 体验的 Socket 和 WebSocket 开发方式。这个想法,要求消息“能路由”、“有元信息”、“可建立关联性”。于是就开发了 Socket.D 早期版本(算是草案版)。经过两年的实践,其重新定义为:
是想要有一种更简单、更通用的通讯方式。简单,且便适用任何场景和平台(想是这么想的啊)。而这,便以 Socket.D 协议作为载体。一个简单的、规范的,面向未来的网络应用协议。
为什么不凑合用别人的呢?
前人,总有不如意啊。而后人总是站在前人的成果上,吸取优点避开缺点。
| 协议 | 不称心的地方 | 
|---|---|
| http | 单向通讯;只能同步响应 | 
| websocket | 没有应用语义,只有框架;需要二次定制 | 
| rsocket | 纯响应式接口太复杂;没有事件;元信息为二进制,无法固定标准。不通用 | 
| socket.io | 没有流;没有元信息 | 
Socket.D 具备它们的优点,又美好的避开了缺点。是,更具普世性的通用协议。
为什么不基于别人的呢?
Socket.D  作为网络应用协议,原则上可支持任意传输协议。目前适配有 TCP、UDP 之类的基础传输协议;也适配有 WebSocket、KCP 之类有加工过的传输协议。未来还可能适配别的传输协议。
为什么要基于事件消息驱动?
网络通信是异步的,消息驱动可建立起单个连接上的多路消息流,从而实现多路复用,一个连接同时多请求多响应。而基于事件,是让消息可路由,可分类处理。这个就像 mq 协议的 topic。
为什么要元信息?
http 协议,就是因为有元信息(它叫头信息),玩出了各种花!有了元信息,就可以为数据进行语义标注。就可以实现各种扩展的场景应用!
为什么要流?
连接上传输的数据即为流。协议通过流标识(sid),为传输来回的相关数据建立起关联性。Socket.D 基于流而行成的接口交互模型:
| 接口 | 描述 | 说明 | 
|---|---|---|
| send | 发送 | 相当于 Qos0 | 
| sendAndRequest | 发送并请求。要求一个答复 | 相当于 Qos1 | 
| sendAndSubscribe | 发送并订阅。可接收零个或多个答复消息 | |
| reply | 答复 | |
| replyEnd | 答复结束 | 
为什么是这样的接口交互?
首先 http 的接口交互是最经典。Socket.D 算是对它的学习、补充和扩展。因为我们是消息驱动的嘛,大家都是讲发消息、发消息。所以用 send 开头:
a) send 发送
发完后,不需要答复。它是能带来性能提升的,不仅是跳过了答复而节省网络使用,而且不需要等待响应或也不需要建立消息的流关联。是 http 请求/响应模式的补充。
b) sendAndRequest 发送并请求。要求一个答复
http 经典的请求/响应模式。不管在什么时候都非常有用,必须支持
c) sendAndSubscribe 发送并订阅。可接收多个答复消息
也是 http 请求/响应模式 的扩展,它允许多个答复消息被流回。可以看作是“collection”的响应,但不是将所有数据作为单个答复返回,而是将每个元素按顺序返回。
适用的场景可能是:
- 获取视频列表
- 获取目录中的产品
- 逐行检索文件
d) reply 答复
配合 sendAndRequest,sendAndSubscribe 答复消息
d) replyEnd 答复结束
配合 sendAndSubscribe 答复消息,并告知答复结束了。
为什么规划了多平台多语言?
大型分布式系统通常由不同的团队使用各种技术和编程语言以模块化的方式实现。这些模块需要可靠地通信,支持快速、独立的进化。在分布式系统中,模块间有效且可扩展的通信是一个关键问题。它会显著影响用户体验的延迟以及构建和运行系统所需的资源量。
Socket.D 这么好的协议,必须争取让所有的平台和语言都能用上。参与这种问题的解决。
Socket.D 协议的开发缘由的更多相关文章
- 基于GBT28181:SIP协议组件开发-----------第四篇SIP注册流程eXosip2实现(一)
		原创文章,引用请保证原文完整性,尊重作者劳动,原文地址http://www.cnblogs.com/qq1269122125/p/3945294.html. 上章节讲解了利用自主开发的组件SIP组件l ... 
- 基于.net C# Socket WinForm MQTT 客户端开发
		1.什么是MQTT? MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的&quo ... 
- Packetbeat协议扩展开发教程 一
		原文链接:http://elasticsearch.cn/article/48 Packetbeat(https://www.elastic.co/products/beats/packetbeat) ... 
- 基于GBT28181:SIP协议组件开发-----------第一篇环境搭建
		原创文章,引用请保证原文完整性,尊重作者劳动,原文地址http://www.cnblogs.com/qq1269122125/p/3930018.html,qq:1269122125. SIP协议在安 ... 
- Socket的协议地址属性
		首先列举所需要的头文件 #include <sys/types.h> #include <sys/socket.h> #include <unistd.h> #in ... 
- koa+mysql+vue+socket.io全栈开发之数据访问篇
		后端搭起大体的框架后,接着涉及到的就是如何将数据持久化的问题,也就是对数据库进行 CURD 操作. 关于数据库方案, mongodb 和 mysql 都使用过,但我选用的是 mysql,原因: 目前为 ... 
- Packetbeat协议扩展开发教程(1)
		Packetbeat ( https://www.elastic.co/products/beats/packetbeat )是一个开源的网络抓包与分析框架,内置了很多常见的协议解析,如HTPP.My ... 
- TCPIP、Http、Socket的协议~ 写得挺形象,赞
		这篇文章写得挺形象,对TCPIP.HTTP.Socket的作用有一个整体层次的理解. 转载文章内容如下: 网络由下往上分为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 通过初步的了 ... 
- 深入浅出HTTP协议(WEB开发和面试必备)
		1. 基础概念篇 a.简介 HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写.它的发展是万维网协会(World Wide Web Consortium)和 ... 
- .net 平台下, Socket通讯协议中间件设计思路(附源码)
		.net 平台下,实现通讯处理有很多方法(见下表),各有利弊: 序号 实现方式 特点 1 WCF 优点:封装好,方便.缺点:难学,不跨平台 2 RocketMQ,SuperSocket等中间件 优点: ... 
随机推荐
- SQL常用日期格式化转换与百分数转换
			目录 SQL将小数转为保留两位的百分数 常用的日期格式化 补充: 秒/毫秒转为持续时间 常用拼接方式: 本篇开启数据库在工作中常用到的格式转换与工具,欢迎大家评论留言 SQL将小数转为保留两位的百分数 ... 
- 如何在 Debian 12 上安装 MariaDB
			MariaDB 是一个开源多线程的关系数据库管理系统,是 MySQL 的替代品. MariaDB 是 Debian 中 MySQL 的默认替换方案. 本教程介绍如何在 Debian 12 上安装 Ma ... 
- 【调试】GDB使用总结
			启动 在shell下敲gdb命令即可启动gdb,启动后会显示下述信息,出现gdb提示符. ➜ example gdb GNU gdb (Ubuntu 8.1.1-0ubuntu1) 8.1.1 Cop ... 
- LaTex · overleaf | 使用技巧存档
			如何使用 bibtex:http://www.taodudu.cc/news/show-5832925.html?action=onClick bibtex 格式:https://blog.csdn. ... 
- Listener refused the connection with the following error: ORA-12514
			1.问题 在使用Oracle SQL Developer时,遇到以下问题: 状态: 失败 -测试失败: Listener refused the connection with the followi ... 
- [转帖]如何查看Docker容器环境变量,如何向容器传递环境变量
			https://www.cnblogs.com/larrydpk/p/13437535.html 1 前言 欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章! 了解Docker容器的运行 ... 
- Springboot开发的应用为什么这么占用内存
			Springboot开发的应用为什么这么占用内存 Java的原罪 Java 程序员比 c或者是c++程序员相比轻松了很多. 不要管理繁杂的内存申请与释放,也不用担心因为忘记释放内存导致很严重的内存泄漏 ... 
- [转帖]Linux fsync和fdatasync系统调用实现分析(Ext4文件系统)
			转自:https://blog.csdn.net/luckyapple1028/article/details/61413724 在Linux系统中,对文件系统上文件的读写一般是通过页缓存(pag ... 
- [转帖]TiKV集群搭建
			https://www.cnblogs.com/luohaixian/p/15227788.html 1.准备环境 准备4台ubuntu 16.04虚拟机 部署规划: 节点类型 CPU 内存 存储 部 ... 
- [转帖] jq命令用法总结
			https://www.cnblogs.com/codelogs/p/16324928.html 原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处. 简介# 如果说要给Li ... 
