在我的项目中,我希望有多个客户端连接到服务。我正在使用Java Rsocket实现。
该服务应为每个客户端维护一个状态。现在,我可以通过某些标识符来管理客户端。我已经实现了此选项。但是我不想使用字符串手动管理 session 。
因此,另一个想法是通过Rsocket连接来识别客户端。有没有一种方法可以使用Rsocket channel 来标识特定客户端?
想象一个示例服务和几个客户。每个客户端都有Rsocket channel ,其中的服务已启动并正在运行。有没有一种方法可以使用Rsocket channel 在服务器端识别这些客户端?如果您可以显示此类行为的程序化示例,那将是惊人的。
谢谢!
编辑(详细描述情况)
这是我的例子。
当前,我们使用了三个CORBA对象,如下图所示:
客户端执行n条命令后,他可以提交或回滚事务(也可以通过Transaction对象上的方法)。
因此,这里我们使用 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)。
谢谢,
罗伯特