Socket.D 开源输传协议的集群转发特性
1、简介
Socket.D 是基于"事件"和"语义消息""流"的网络应用层协议。底层可以依赖 TCP、UDP、KCP、WebSocket 等传输层协议。其开发背后的动机是用开销更少的协议取代超文本传输协议(HTTP),HTTP 协议对于许多任务(如微服务通信)来说效率低下。
2、Socket.D 的集群应用
在 Socket.D 的集群故事里,会有三个角色:
- 请求者
- 经理人(或者中间人)
- 响应者
客户端通过 url 连接经理人后,就会成为集群的一部分。它可以是请求者,也可以是响应者。
sd:tcp://127.0.0.1:8602?@=demoapp
url 会包括:
- 协议头(sd 表示 socket.d 协议,tcp 表示传输方案)
- 地址与端口
- 路径
- 还有
@
参数,这个参数会申明自己的应用名字。连接经理人时,也相当于完成身份注册了。
在集群内部,相互间通过 At
进行发起向“响应者”的请求。就像:
session.send("test", new StringEntity("hello").at("demoapp"));
3、集群的四种转发
在集群的活动中,请求者会发消息给经理人,经理人根据 at name 再转发给相应的响应者。
- 四种转发方式(单播,单播!,组播,广播):
at | 描述 | 备注 |
---|---|---|
demoapp | 单播 | 给叫这个名的其中一个会话发(使用 平均轮询 “负载均衡”策略) |
demoapp! | 单播! | 给叫这个名的其中一个会话发(使用 ip_hash “负载均衡”策略) |
demoapp* | 组播 | 给叫这个名的整组会话发(如果自己也叫这个名,则自己除外) |
* | 广播 | 给集群里的全部会话发(自己除外) |
- 通过at方式进行转发,示例:
session.send("test", new StringEntity("hello").at("demoapp")); session.send("test", new StringEntity("hello").at("demoapp!")); session.send("test", new StringEntity("hello").at("demoapp*")); session.send("test", new StringEntity("hello").at("*"));
4、演示
假设经理人(或者中间人) 的服务地址为:127.0.0.1:8602。下面以 Java 语言展示效果:
- 创建经理人
public class BrokerDemo { public static void main(String[] args) throws Exception { SocketD.createServer("sd:tcp") .config(c -> c.port(8602).fragmentHandler(new BrokerFragmentHandler())) .listen(new BrokerListener()) .start(); } }
- 创建响应者(自己不需要端口启动,连接经理人后即可提供服务)
public class ResponderDemo { public static void main(String[] args) throws Exception { //连接到 broker ,并给自己命名为:demoapp ClientSession session = SocketD.createClient("sd:tcp://127.0.0.1:8602?@=demoapp") .listen(new EventListener().doOn("/hello", (s,m)->{ //监听 "/hello" 事件,如果是请求则答复 if(m.isRequest()){ s.reply(m, new StringEntity("me too!")); } })) .open(); } }
- 创建请求者
public class RequesterDemo { public static void main(String[] args) throws Exception { //连接到 broker ,并给自己命名为:demotester ClientSession session = SocketD.createClient("sd:tcp://127.0.0.1:8602?@=demotester") .open(); //发送消息,并要求转发给 "demoapp" session.sendAndRequest("/hello", new StringEntity("").at("demoapp")).thenReply(r->{ //收到答复后,打印结果 print(r.dataAsString()); }); } }

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
凹语言发布 v0.9.1,支持 P5 儿童编程
凹语言设计的目标之一是简单易用。但是对于新接触编程的儿童教学来说依然有一定的门槛。为此开发组尝试将面向创意编程的Processing理念引入凹语言,通过js/p5包可以轻松实现一些简单的互动创意设计。 下面是来自杭州一小学三年级小学生的第一个凹语言程序: 通过VS Code将以上的程序输入电脑,编译并执行的效果如下: 程序本身也非常简单:首先通过import引入 P5 包;然后在init初始化一个长宽都是400的画布并设置一个灰色背景色;Draw函数负责每一帧的绘制,根据鼠标是否按下绘制不同大小的圆形。 下面是杭州一小学二年级的小学生通过一个绘制线段的程序互动的效果: 目前js/p5包的功能还有限,我们会在小朋友学习的过程中逐步完善。希望未来每个中国的小学生都能通过我国的编程语言入门并进行日常开发。
- 下一篇
Mozilla 裁员 60 人,提升 Firefox Mobile 优先级
在任命 Laura Chambers 担任临时 CEO 不到一周后,Mozilla 宣布裁员约 60 人并缩减多项产品的投资。 Mozilla 将缩减 VPN、Relay 和 Online Footprint Scrubber 等的投资,关闭 2018 年推出的 3D 虚拟世界 Hubs,缩减对 Mastodon 实例 mozilla.social 的投资。和今天的很多科技公司类似,Mozilla 将专注于将可信赖的 AI 引入到 Firefox。 Mozilla 在一份声明中写道:“我们正在缩减对某些产品的投资,以便将重点放在我们认为最有可能取得成功的领域。我们打算将资源重新优先用于 Firefox Mobile 等产品,因为这些产品有很大的发展机会,并能为业界建立更好的模式。” 相关链接:https://techcrunch.com/2024/02/13/mozilla-downsizes-as-it-refocuses-on-firefox-and-ai-read-the-memo
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS8编译安装MySQL8.0.19
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Red5直播服务器,属于Java语言的直播服务器
- CentOS6,7,8上安装Nginx,支持https2.0的开启