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);
        
            //設置增強協議,使用加密協議(客戶端也要一同設置)
            SocketD.setProtocol(new MessageProtocolSecret() {
                @Override
                public byte[] encrypt(byte[] bytes) throws Exception {
                    return EncryptUtils.aesEncrypt(bytes,"pLft36Ok5zfmP6zI");
                }

                @Override
                public byte[] decrypt(byte[] bytes) throws Exception {
                    return EncryptUtils.aesDecrypt(bytes,"pLft36Ok5zfmP6zI");
                }
            });
        });
    }
}

//定義服務端監聽
@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, app->{
            //設置增強協議,使用加密協議(服務端也要一同設置)
            SocketD.setProtocol(new MessageProtocolSecret() {
                @Override
                public byte[] encrypt(byte[] bytes) throws Exception {
                    return EncryptUtils.aesEncrypt(bytes,"pLft36Ok5zfmP6zI");
                }

                @Override
                public byte[] decrypt(byte[] bytes) throws Exception {
                    return EncryptUtils.aesDecrypt(bytes,"pLft36Ok5zfmP6zI");
                }
            });
        });
        
        //建立會話(若是後端是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後端

相關文章
相關標籤/搜索