Socket.D 网络应用协议,v2.1.6 发布

有用户说,"Socket.D 之于 Socket,尤如 Vue 之于 Js、Mvc 之于 Http"

与其它协议的简单对比

对比项目 socket.d http websocket rsocket socket.io
发消息(Qos0) 有 无 有 有 有
发送并请求(Qos1) 有 有 无 有 无
发送并订阅 有 无 无 有 无
答复或响应 有 有 无 有 无
单连接双向通讯 有 无 有(不便) 有 有(不便)
数据分片 有 / 无 有 有
断线自动重连 有 / 无 有 有
有元信息 有 有 无 有 无
有事件(或路径) 有 有 无 无 有
有流(或消息关联性) 有 无 无 有 无
Broker 模式集群 有 无 无 有 无
异步 异步 同步 异步 异步 异步
接口体验 经典 经典 经典 响应式(复杂) 经典
基础传输协议 tcp, udp, ws tcp http tcp, udp, ws ws

本次更新

  • 开放 FragmentSize 可配置
  • 添加 Channel::onError 方法(属于内部调整)
  • 添加 ChannelSupporter 接口,并简化 Channel 构造函数(属于内部调整)
  • 添加 SessionWrapper 包装类(便于监视会话的支行)
  • 添加 集群客户端接口及创建方式 SocketD.createClusterClient()
  • 统一客户端与集群客户端接口
  • 统一客户端会话与集群客户端会话接口

新的集群客户端对比示例:

java 复制代码
//单机客户端
ClientSession sessoin = SocketD.createClient("sd:tcp://127.0.0.1:8602")
        .listen(new EventListener().on("hello", (s, m) -> {
            System.out.println(m);
        }))
        .open();
        
//集群客户端
ClientSession sessoin = SocketD.createClusterClient("sd:tcp://127.0.0.1:8602", 
                            "sd:tcp://127.0.0.1:8603", 
                            "sd:tcp://127.0.0.1:8604")
        .listen(new EventListener().on("hello", (s, m) -> {
            System.out.println(m);
        }))
        .open();

Brokeer 集群示例:

java 复制代码
public class Demo07_Broker {
    public static void main(String[] args) throws IOException {
        //创建 broker 服务
        SocketD.createServer("sd:tcp")
                .config(c -> c.port(8602).fragmentHandler(new BrokerFragmentHandler()))
                .listen(new BrokerListener())
                .start();
        
        //创建服务并加入 broker 集群
        SocketD.createClient("sd:tcp://127.0.0.1:8602/?@=server")
                .listen(new EventListener().on("hello", (s, m) -> {
                    System.out.println("Server0: " + m);

                    if (m.isSubscribe() || m.isRequest()) {
                        s.replyEnd(m, new StringEntity("me to!" + m.dataAsString()));
                    }
                }))
                .open();
    }
}

代码仓库

相关推荐
小毛驴8504 分钟前
mvn help:effective-settings 与 mvn help:effective-pom
java·linux·前端
silvamux_17 分钟前
MiniMax API 调用教程:兼容 OpenAI 写法
java·数据库·elasticsearch
染指111021 分钟前
145.Agent-LangGraph基础概念和安装和简单代码示例
java·服务器·数据库·langchain·agents
Doker 多克23 分钟前
ForkJoinPool 详解
java·多线程
Wang's Blog35 分钟前
Java 项目实战: 交友项目 - Dubbo 启动检查
java·dubbo·交友
零基础12341 分钟前
权限管理怎么做?从“资格”与“空间”双维度设计一套可落地的权限体系
java·服务器·数据库
starzy19901 小时前
Flink Task 调度任务深度剖析:从调度策略到故障恢复的完整链路
java·大数据·flink
开开心心_Every1 小时前
文件查重软件批量删除重复文件释放空间
java·开发语言·c#·计算机外设·ocr·excel·perl
Wang's Blog1 小时前
Java 项目实战: 交友项目 - 技术架构与选型剖析
java·架构·交友
我是大猴子1 小时前
一些八股和限流措施
java