情况如下:
作为客户端A
和B
使用RSocket
协议(通过WebSocket
)(以及相应的连接A
和{{1 }}已建立),则可以选择将其每个特定事件(B
或event A
)通知每个事件,因此应在客户端(event B
)。
更清楚地说,这是如何使用event X -> action on client X
实现所需的方案:
WebSockets
。session ID
的事件。session ID
(例如从WS session
中)并使用它发送事件。如何使用RSocket实现相同的流程?
谢谢
答案 0 :(得分:0)
您可以通过设置有效载荷来实现。
服务器:
@Controller
public class ServerController {
private static final Map<String, RSocketRequester> REQUESTER_MAP = new HashMap<>();
@ConnectMapping("client-id")
void onConnect(RSocketRequester rSocketRequester, @Payload String clientId) {
rSocketRequester.rsocket()
.onClose()
.subscribe(null, null,
() -> REQUESTER_MAP.remove(clientId, rSocketRequester));
REQUESTER_MAP.put(clientId, rSocketRequester);
}
}
客户:
Mono<RSocketRequester> rSocketRequesterMono(
RSocketRequester.Builder rSocketRequesterBuilder, // preconfigured bean
RSocketMessageHandler rSocketMessageHandler, // preconfigured bean
URI webSocket, String clientId) {
return rSocketRequesterBuilder
.rsocketFactory(rsocketFactory -> rsocketFactory
.addSocketAcceptorPlugin(socketAcceptor ->
rSocketMessageHandler.responder()))
.setupRoute("client-id")
.setupData(clientId)
.connectWebSocket(webSocket);
}
现在,您可以在服务器端通过客户端获取RSocketRequester并调用特定的客户端。