有用户说,“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()
- 统一客户端与集群客户端接口
- 统一客户端会话与集群客户端会话接口
新的集群客户端对比示例:
//单机客户端
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 集群示例:
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();
}
}
代码仓库