有使用者說,“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();
}
}