Socket.D 網路應用協議,v2.1.6 釋出

帶刺的坐椅發表於2023-12-11

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

程式碼倉庫

相關文章