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
本案以单连接双向RPC模式为例演示:(在RPC调用模式基础上,增长服务端反向接口调用)git
<parent> <groupId>org.noear</groupId> <artifactId>solon-parent</artifactId> <version>1.2.18</version> </parent> <dependencies> <dependency> <groupId>org.noear</groupId> <artifactId>solon.boot.socketd.smartsocket</artifactId> </dependency> <dependency> <groupId>org.noear</groupId> <artifactId>solon.serialization.snack3</artifactId> </dependency> <dependency> <groupId>org.noear</groupId> <artifactId>nami.channel.socketd.smartsocket</artifactId> </dependency> <dependency> <groupId>org.noear</groupId> <artifactId>nami.coder.snack3</artifactId> </dependency> </dependencies>
Rpc 模式借用了 Nami 作客户端定义(Nami 是 Solon 伴生框架,定位为 Rpc 通用客户端)网络
@NamiClient("demo:/demoe/rpc") public interface HelloService { String hello(String name); } @NamiClient("demo:/demoe/rpc/name") public interface NameService { String name(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)); } } //定义远程服务组件(供客户端调用) @Mapping(value = "/demoe/rpc", method = MethodType.SOCKET) @Component(remoting = true) public class HelloServiceImpl implements HelloService { public String hello(String name) { //[服务端] 反向调用 [客户端] 的远程服务组件*** NameService rpc = SocketD.create(Context.current(), NameService.class); name = rpc.name(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); System.out.println("RPC result: " + rpc.hello("noear")); } } //定义远程服务组件(供服务端调用) @Mapping(value = "/demoe/rpc/name", method = MethodType.SOCKET) @Component(remoting = true) public class NameServiceImpl implements NameService { @Override public String name(String name) { return name + "2"; } }
https://gitee.com/noear/solon_demo/tree/master/demo28.solon_socketd_rpcapp