共計 1880 個字符,預計需要花費 5 分鐘才能閱讀完成。
這篇文章主要介紹“SocketD 協議的 RPC 鑒權模式怎么實現”,在日常操作中,相信很多人在 SocketD 協議的 RPC 鑒權模式怎么實現問題上存在疑惑,丸趣 TV 小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”SocketD 協議的 RPC 鑒權模式怎么實現”的疑惑有所幫助!接下來,請跟著丸趣 TV 小編一起來學習吧!
SocketD 是一種二進制的點對點通信協議,是一種新的網絡通信第七層協議。旨在用于分布式應用程序中。從這個意義上講,SocketD 可以是 RSocket 等其他類似協議的替代方案。它的消息協議規范具有異步,背壓的雙向,多路復用,斷線重連,基于消息等特性。暫時只提供 Java 實現,目前做為 Solon rpc 的 sockte 通道協議。
本案在 RPC 調用模式的基礎上增加簽權為例演示:
接口定義
Rpc 模式借用了 Nami 做客戶端定義(Nami 是 Solon 伴生框架,定位為 Rpc 通用客戶端)
@NamiClient(demo:/demoe/rpc)
public interface HelloService {
@Handshake
boolean auth(String sn, String token);
String hello(String name);
}
服務端
// 啟動服務端
public class ServerApp { public static void main(String[] args) {
// 啟動 Solon 容器(SocketD bean plugin 由 solon 容器管理) Solon.start(ServerApp.class, args, app - app.enableSocketD(true))
.socket(** , (session, message) - { if (message.flag() != MessageFlag.handshake) { if (session.getHandshaked() == false) {
System.out.println( 這個客戶端很壞,沒簽權就想發包:( session.close();
}
}
});
//.socket(..) 可替代 @ServerEndpoint 使用
}
// 定義遠程服務組件
@Mapping(value = /demoe/rpc , method = MethodType.SOCKET)
@Component(remoting = true)
public class HelloServiceImpl implements HelloService {
@Override
public boolean auth(String sn, String token) { Session session = (Session) Context.current().request();
if (1 .equals(token)) { session.setHandshaked(true);
System.out.println( 簽權成功!
return true;
}else{ session.setHandshaked(false);
return false;
}
}
public String hello(String name) {
return name= + name;
}
}
客戶端
// 啟動客戶端
public class ClientApp { public static void main(String[] args) throws Throwable {
// 啟動 Solon 容器(SocketD bean plugin 由 solon 容器管理) Solon.start(ClientApp.class, args);
//[客戶端] 調用 [服務端] 的 rpc
//
HelloService rpc = SocketD.create(tcp://localhost:28080 , HelloService.class);
if (rpc.auth( 1 , 1)) { System.out.println( RPC result: + rpc.hello( noear));
}
}
}
到此,關于“SocketD 協議的 RPC 鑒權模式怎么實現”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注丸趣 TV 網站,丸趣 TV 小編會繼續努力為大家帶來更多實用的文章!
正文完