1. 程式人生 > 實用技巧 >Solon rpc 之 SocketD 協議 - 訊息上報模式

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

Solon rpc 之 SocketD 協議
Solon rpc 之 SocketD 協議 - 概述
Solon rpc 之 SocketD 協議 - 訊息上報模式

SocketD 是一種二進位制的點對點通訊協議,是一種新的網路通訊第七層協議。旨在用於分散式應用程式中。從這個意義上講,SocketD可以是RSocket等其他類似協議的替代方案。它的訊息協議規範具有非同步,背壓的雙向,多路複用,斷線重連,基於訊息等特性。暫時只提供Java實現,目前做為Solon rpc的sockte通道協議。

本案以簡單的訊息上報模式為例演示:

包依賴

<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