Solon rpc 之 SocketD 協議 - 消息上報模式

Solon rpc 之 SocketD 協議系列
Solon rpc 之 SocketD 協議 - 概述
Solon rpc 之 SocketD 協議 - 消息上報模式
Solon rpc 之 SocketD 協議 - 消息應答模式
Solon rpc 之 SocketD 協議 - 消息訂閱模式
Solon rpc 之 SocketD 協議 - RPC調用模式
Solon rpc 之 SocketD 協議 - 單連接雙向RPC模式
Solon rpc 之 SocketD 協議 - 消息加密模式html

SocketD 是一種二進制的點對點通訊協議,是一種新的網絡通訊第七層協議。旨在用於分佈式應用程序中。從這個意義上講,SocketD能夠是RSocket等其餘相似協議的替代方案。它的消息協議規範具備異步,背壓的雙向,多路複用,斷線重連,基於消息等特性。暫時只提供Java實現,目前作爲Solon rpc的sockte通道協議。java

本案以簡單的消息上報模式爲例演示:git

包依賴

<dependency>
    <groupId>org.noear</groupId>
    <artifactId>solon.boot.socketd.smartsocket</artifactId>
    <version>1.2.18</version>
</dependency>

服務端

//啓動服務端
public class ServerApp {
    public static void main(String[] args) {
        //啓動Solon容器(SocketD bean&plugin 由solon容器管理)
        Solon.start(ServerApp.class, args, app -> app.enableSocketD(true));
    }
}

//定義服務端監聽
@ServerEndpoint
public class ServerListener implements Listener {
    @Override
    public void onOpen(Session session) {
        System.out.println("有客戶端鏈上來嘍...");
    }

    @Override
    public void onMessage(Session session, Message message) {
        //收到消息,作業務處理
        if(message.flag() != MessageFlag.heartbeat){
            System.out.println("服務端:我收到心跳");
        }else {
            System.out.println("服務端:我收到:" + message.bodyAsString());
        }
    }
}

客戶端

//啓動客戶端
public class ClientApp {
    public static void main(String[] args) throws Throwable {
        //啓動Solon容器(SocketD bean&plugin 由solon容器管理)
        Solon.start(ClientApp.class, args);
        
        //建立會話(若是後端是WebSocekt,協議頭爲:ws)
        Session session = SocketD.createSession("tcp://localhost:28080");

        //設定30秒自動上發心跳(若是斷開了,也嘗試自動重鏈)
        session.sendHeartbeatAuto(30);
        
        //上報消息
        session.send("Helloworld server!");
    }
}

附:源碼

https://gitee.com/noear/solon_demo/tree/master/demo28.solon_socketd_message後端

相關文章
相關標籤/搜索