为什么搞个新协议?

2021年时,想为 Solon 生态 提供一种 MVC 体验的 Socket 和 WebSocket 开发方式。这个想法,要求消息“能路由”、“有元信息”、“可建立关联性”。于是就开发了 Socket.D 早期版本(算是草案版)。经过两年的实践,其重新定义为:

是想要有一种更简单、更通用的通讯方式。简单,且便适用任何场景和平台(想是这么想的啊)。而这,便以 Socket.D 协议作为载体。一个简单的、规范的,面向未来的网络应用协议。

为什么不凑合用别人的呢?

前人,总有不如意啊。而后人总是站在前人的成果上,吸取优点避开缺点。

协议 不称心的地方
http 单向通讯;只能同步响应
websocket 没有应用语义,只有框架;需要二次定制
rsocket 纯响应式接口太复杂;没有事件;元信息为二进制,无法固定标准。不通用
socket.io 没有流;没有元信息

Socket.D 具备它们的优点,又美好的避开了缺点。是,更具普世性的通用协议。

为什么不基于别人的呢?

Socket.D 作为网络应用协议,原则上可支持任意传输协议。目前适配有 TCPUDP 之类的基础传输协议;也适配有 WebSocketKCP 之类有加工过的传输协议。未来还可能适配别的传输协议。

为什么要基于事件消息驱动?

网络通信是异步的,消息驱动可建立起单个连接上的多路消息流,从而实现多路复用,一个连接同时多请求多响应。而基于事件,是让消息可路由,可分类处理。这个就像 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 协议的开发缘由的更多相关文章

  1. 基于GBT28181:SIP协议组件开发-----------第四篇SIP注册流程eXosip2实现(一)

    原创文章,引用请保证原文完整性,尊重作者劳动,原文地址http://www.cnblogs.com/qq1269122125/p/3945294.html. 上章节讲解了利用自主开发的组件SIP组件l ...

  2. 基于.net C# Socket WinForm MQTT 客户端开发

    1.什么是MQTT? MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的&quo ...

  3. Packetbeat协议扩展开发教程 一

    原文链接:http://elasticsearch.cn/article/48 Packetbeat(https://www.elastic.co/products/beats/packetbeat) ...

  4. 基于GBT28181:SIP协议组件开发-----------第一篇环境搭建

    原创文章,引用请保证原文完整性,尊重作者劳动,原文地址http://www.cnblogs.com/qq1269122125/p/3930018.html,qq:1269122125. SIP协议在安 ...

  5. Socket的协议地址属性

    首先列举所需要的头文件 #include <sys/types.h> #include <sys/socket.h> #include <unistd.h> #in ...

  6. koa+mysql+vue+socket.io全栈开发之数据访问篇

    后端搭起大体的框架后,接着涉及到的就是如何将数据持久化的问题,也就是对数据库进行 CURD 操作. 关于数据库方案, mongodb 和 mysql 都使用过,但我选用的是 mysql,原因: 目前为 ...

  7. Packetbeat协议扩展开发教程(1)

    Packetbeat ( https://www.elastic.co/products/beats/packetbeat )是一个开源的网络抓包与分析框架,内置了很多常见的协议解析,如HTPP.My ...

  8. TCPIP、Http、Socket的协议~ 写得挺形象,赞

    这篇文章写得挺形象,对TCPIP.HTTP.Socket的作用有一个整体层次的理解. 转载文章内容如下: 网络由下往上分为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层.   通过初步的了 ...

  9. 深入浅出HTTP协议(WEB开发和面试必备)

    1. 基础概念篇   a.简介 HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写.它的发展是万维网协会(World Wide Web Consortium)和 ...

  10. .net 平台下, Socket通讯协议中间件设计思路(附源码)

    .net 平台下,实现通讯处理有很多方法(见下表),各有利弊: 序号 实现方式 特点 1 WCF 优点:封装好,方便.缺点:难学,不跨平台 2 RocketMQ,SuperSocket等中间件 优点: ...

随机推荐

  1. Codeforces Round #713 (Div. 3) Person Editorial

    补题链接:Here 1512A - Spy Detected! 题意:找到唯一不同数的下标 复制数组然后比较 \(a_1\) int main() { ios_base::sync_with_stdi ...

  2. 图解 Promise 实现原理(四)—— Promise 静态方法实现

    本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/Lp_5BXdpm7G29Z7zT_S-bQ作者:Morrain 了用法,原生提供了Promis ...

  3. vue 状态管理 三、Mutations和Getters用法

    系列导航 vue 状态管理 一.状态管理概念和基本结构 vue 状态管理 二.状态管理的基本使用 vue 状态管理 三.Mutations和Getters用法 vue 状态管理 四.Action用法 ...

  4. 《3D编程模式》写书-第6次记录

    大家好,这段时间我完成了对初稿的第二轮修改,已经把稿子提交给编辑了 这里是所有的的写书记录: <3D编程模式>写书记录 本轮修改主要进行了下面的修改: 修改UML描述 增加依赖关系 角色之 ...

  5. Vue大数据可视化(大屏展示)解决方案

    DataV:组件库基于Vue (React版) ,主要用于构建大屏(全屏)数据展示页面即数据可视化 官网地址: http://datav.jiaminghi.com/guide/#%E7%94%A8% ...

  6. vue中mixin作用

  7. nginx和前端

  8. gradle简介与windows安装操作

    本文为博主原创,转载请注明出处: 目录 1.Gradle 简介 2.gradel 与 maven 对比 3.安装 gradle 3.1.安装jdk 3.2.下载gradle 3.3.下载解压到指定目录 ...

  9. 275.H指数II

    1.题目介绍 给你一个整数数组 citations ,其中 citations[i] 表示研究者的第 i 篇论文被引用的次数,citations 已经按照 升序排列 .计算并返回该研究者的 h 指数. ...

  10. 【Gerrit】 快捷操作

    A:添加Reviewers V+B:Pachset刷到最新 D:Download patch J.K:文件移动选中 R:文件Reviewed状态修改 S:五星状态修改,可用于分类管理 U:返回上层 I ...