首页 > 其他分享 >Socket.D 协议的开发缘由

Socket.D 协议的开发缘由

时间:2024-02-02 12:55:06浏览次数:21  
标签:协议 http Socket 响应 答复 消息 缘由

为什么搞个新协议?

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 答复消息

e) replyEnd 答复结束

配合 sendAndSubscribe 答复消息,并告知答复结束了。

为什么规划了多平台多语言?

大型分布式系统通常由不同的团队使用各种技术和编程语言以模块化的方式实现。这些模块需要可靠地通信,支持快速、独立的进化。在分布式系统中,模块间有效且可扩展的通信是一个关键问题。它会显著影响用户体验的延迟以及构建和运行系统所需的资源量。

Socket.D 这么好的协议,必须争取让所有的平台和语言都能用上。参与这种问题的解决。

标签:协议,http,Socket,响应,答复,消息,缘由
From: https://www.cnblogs.com/noear/p/18003000

相关文章

  • 路由选择协议(学习笔记)
    一、概述路由选择协议分为静态路由选择和动态路由选择。静态路由是由人工配置的网络路由、默认路由、特定主机路由与黑洞路由。这种方式简单,开销小,但是并不能及时适应网络状态的变化,一般只在小规模网络中使用。动态路由指路由器通过路由选择协议自动获取路由器信息。比较复......
  • web-http协议与https协议
    web-http协议与https协议http协议超文本传输协议(英文:HyperTextTransferProtocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是一个客户端终端(用户)和服务器端(网站)请求和应答的标准(TCP)。http协议运行简要流程1.在客户端输入URL2.客户端向DNS服务器......
  • github 代码使用注意事项 开源协议 license
    MIT许可证:只为作者保留版权,而无任何其他了限制。它使人们几乎可以对您的项目进行任何操作,即时是制作和分发封闭源代码版本。Babel,.NETCore和Rails使用MIT许可证¹。BSD许可证:同样鼓励代码共享和尊重原作者的著作权,同样允许代码修改,再发布(作为开源或商业软件)。需要满足......
  • linux之socket编程
    linux之socket编程源IP地址与目的IP地址任何主机想要进行网络通信,首先就要拥有IP地址!因为每台主机都有网络地址就注定了有——源IP与目的IP消息从哪里发送——发送主机的IP就是源IP消息要到哪里——接收消息的主机的IP就是目的IP!在IP报头里面就包含了源IP与目的IP端口号......
  • Socket.D v2.3.9 发布(增加 node.js server 实现)
    Socket.D是基于"事件"和"语义消息""流"的网络应用层传输协议。有用户说,“Socket.D之于Socket,尤如Vue之于Js、Mvc之于Http”。支持tcp,udp,ws,kcp传输。协议特点可参考《官网介绍》。pyton已开发完成,再在测试中;go,rust,c++正在开发中。forJava适配框架更新说......
  • python网络编程笔记(一)Socket 编程入门
    一:Socket简介套接字起源于20世纪70年代加利福尼亚大学伯克利分校版本的Unix,即人们所说的BSDUnix。因此,有时人们也把套接字称为“伯克利套接字"或"BSD套接字”。一开始,套接字被设计用在同-台主机上多个应用程序之间的通讯BSDSocket接口是TCP/IP网络的API在Linux,Unix和W......
  • 云邮件服务器,mail服务器,邮箱群发,全自动邮件群发,http协议群发实现解析
    /*对于部署mail服务器的VPS机器笔者建议最好使用腾讯云或阿里云,毕竟在很多时候群发被被拦截的几率能大大的降低。从而达到理想的状态。域名建议联盟绿色认证或全新无任何黑历史的域名最佳。*/ 一、Mail服务器架设1:Mail服务器使用腾讯云VPS服务器(开通以后切记先解封25端口)......
  • 28图图解Raft协议,so easy~~
    大家好,我是三友~~在之前写的《万字+20张图探秘Nacos注册中心核心实现原理》这篇文章中我留了一个彩蛋当文章点赞量突破28个,就单独写一篇关于Raft协议的文章既然现在文章点赞量已经超过28个,那我就连夜爆肝,把这个坑给填上由于Nacos使用的是实现了Raft协议的JRaft框架,所以本文......
  • Wireshark中的http协议包分析
    Wireshark可以跟踪网络协议的通讯过程,本节通过http协议,在了解Wireshark使用的基础上,重温http协议的通讯过程。TCP(TransmissionControlProtocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。HTTP(HyperTextTransferProtocol,超文本传输协议)是一种用于分布......
  • 物联网浏览器(IoTBrowser)-Modbus协议集成和测试
    Modbus协议在应用中一般用来与PLC或者其他硬件设备通讯,Modbus集成到IoTBrowser使用串口插件模式开发,不同的是采用命令函数,具体可以参考前面几篇文章。目前示例实现了Modbus-Rtu和Modbus-Tcp两种,通过js可以与Modbus进行通讯控制。   一、开发插件添加引用添加NModbus4,......