在我的项目中,我希望有多个客户端连接到服务。我正在使用Java Rsocket实现。

该服务应为每个客户端维护一个状态。现在,我可以通过某些标识符来管理客户端。我已经实现了此选项。但是我不想使用字符串手动管理 session 。

因此,另一个想法是通过Rsocket连接来识别客户端。有没有一种方法可以使用Rsocket channel 来标识特定客户端?

想象一个示例服务和几个客户。每个客户端都有Rsocket channel ,其中的服务已启动并正在运行。有没有一种方法可以使用Rsocket channel 在服务器端识别这些客户端?如果您可以显示此类行为的程序化示例,那将是惊人的。
谢谢!

编辑(详细描述情况)

这是我的例子。

当前,我们使用了三个CORBA对象,如下图所示:

  • LoginObject(通过NamingService检索引用)。客户端可以调用login()方法来获取 session
  • Session对象具有多种方法来查询有关当前服务上下文的详细信息,并且最重要的是获取Transaction对象
  • 通过通用方法,可以将Transaction对象用于执行各种命令,这些方法将commandName和键值对列表作为参数。
    客户端执行n条命令后,他可以提交或回滚事务(也可以通过Transaction对象上的方法)。

  • java - 有状态的Rsocket应用-LMLPHP

    因此,这里我们使用 session 对象在我们的服务上执行事务。

    现在我们决定从CORBA转移到Rsocket。因此,我们需要Rsocket微服务能够存储 session 的状态,否则我们将无法知道将要提交或回滚的内容。是否可以只为每个客户使用单独的Publisher?

    最佳答案

    这是我前几天制作的一个示例,该示例将使用Netifi的代理创建有状态的RSocket:
    https://github.com/netifi/netifi-stateful-socket

    不幸的是,您需要在本地构建我们的developer分支以进行尝试(https://github.com/netifi/netifi-java)-如果您不想在本地构建它,则应在本周末之前发布包含代码的版本。

    我也正在研究一个纯RSocket示例,但是如果您想了解它如何看待示例中的StatefulSocket。它应该为您提供一个如何使用纯RSocket处理 session 的线索。

    关于交易管理器的其他问题-您需要将交易与正在发出的Reactive Streams信号绑定(bind)-如果收到取消,将回退onError以及收到onComplete,则将提交交易。 Flux/Mono有一些副作用方法,应该可以轻松解决。根据您正在执行的操作,您还可以使用BaseSubscriber,因为它具有处理不同的Reactive Streams信号的钩子(Hook)。

    谢谢,
    罗伯特

    10-08 10:58