[RSocket]使用 RSocket (一)——建立连接

科技资讯 投稿 6400 0 评论

[RSocket]使用 RSocket (一)——建立连接

目录
    0. RSocket 简介
  • 1. 服务端
    • 1.1 SETUP阶段 - 处理客户端发起的连接请求
    • 1.2 保存客户端的 Requester
  • 2. 客户端

0. RSocket 简介

参考阿里云开发者社区的介绍

相关文档和资料:

rsocket-java 原生库例子

在这里我们在客户端使用 rsocket-java 原生库,在服务端使用 spring-boot-starter-rsocket。

1. 服务端

1.1 SETUP阶段 - 处理客户端发起的连接请求

新建一个 RSocketController 类来处理 RSocket 相关的请求。

@Controller
public class RSocketController {

    private static Logger logger = LoggerFactory.getLogger(RSocketController.class;

    // 对到来的连接做一些处理
    @ConnectMapping("connect.setup"
    public Mono<Void> setup(String data, RSocketRequester rSocketRequester {
        logger.info("[connect.setup]Client connection: {}\n", data;
        return Mono.empty(;
    }
}

RSocket 的 metadata 中可以包含路由(Routing)信息,这和 一般 WEB 框架通过解析 URL 将请求导向不同的处理函数是一样的。在连接建立时,客户端会发送一个 SETUP Payload,@ConnectMapping 可以通过解析 SETUP Payload 的 metadata 中的路由信息来使用不同的连接建立阶段的处理函数。在这里,只要 SETUP Payload 的 metadata 中的路由信息是 connect.setup,该函数就会处理建立连接后客户端发送的 SETUP Payload。

1.2 保存客户端的 Requester

RSocketRequester 对象以便服务端在需要时向客户端发起请求。

data 中。然后我们声明一个类来保存 RSocketRequester,代码如下:

public class ConnectedClient {
    public RSocketRequester requester;
    public Date connectedTime;

    ConnectedClient(RSocketRequester requester {
        this.requester = requester;
        this.connectedTime = new Date(;
    }
}

然后我们建立一个 Service 来管理客户端的 RSocketRequester。在这里使用 ConcurrentHashMap 来存储 Requester,键是客户端的 UUID,值是 ConnectedClient 对象。

@Service
public class ConnectedClientsManager {
    private static Logger logger = LoggerFactory.getLogger(ConnectedClientsManager.class;
    public final ConcurrentHashMap<String, ConnectedClient> clients;

    public ConnectedClientsManager( {
        this.clients = new ConcurrentHashMap<>(;
    }

    public Set<String> getAllClientIdentifier( {
        return this.clients.keySet(;
    }

    public RSocketRequester getClientRequester(String clientIdentifier {
        return this.clients.get(clientIdentifier.requester;
    }

    public void putClientRequester(String clientIdentifier, RSocketRequester requester {
        requester.rsocket(
                .onClose(
        

编程笔记 » [RSocket]使用 RSocket (一)——建立连接

赞同 (28) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽