我计划在我的通知系统中使用RSocket。我想为我的后端(Java) RSocket使用Spring,而对于我的前端,我将使用rsocket-js。
我能够快速建立一个请求流交互模型,在这个模型中,我可以在我的系统中提取所有的通知。参见我后端的代码片段:
@MessageMapping("streams")
public Flux<Notification> requestStream() {
log.info("Streaming to notifications...");
return streamEventService.retrieveAllNotifications().log();
}现在,在我的前端,我有以下代码片段:
export class RsocketClientService {
// backend ws endpoint
private readonly wsURL = 'ws://localhost:7000/notification';
client: any;
socket: any
constructor() {
this.client = new RSocketClient({
serializers: {
data: JsonSerializer,
metadata: IdentitySerializer
},
setup: {
keepAlive: 10000,
lifetime: 180000,
dataMimeType: 'application/json',
metadataMimeType: 'message/x.rsocket.routing.v0',
payload: {
data: 23
}
},
transport: new RSocketWebSocketClient({
url: this.wsURL
}),
responder: new EchoResponder()
});
}
public connect() {
console.log("initializeSocket...")
this.client.connect().subscribe({
onComplete: (socket: any) => {
this.socket = socket;
this.socket.connectionStatus().subscribe( (status: any) => {
console.log("Connection status? ", status);
});
},
onError: (error: any) => {
console.error("Connection onError? " + error);
},
onSubscribe: (cancel: any) => {
console.log("Connection onSubscribe? cancel?");
}
});
}
public retrieveNotifications() {
this.socket.requestStream({
data: null,
metadata: String.fromCharCode('streams'.length) + 'streams'
})
.subscribe({
onComplete: () => {
console.log("onComplete?");
},
onError: (error: any) => {
console.error("onError? error: " + error);
},
onNext: (payload: any) => {
console.log("onNext? payload: ", payload);
},
onSubscribe: (subscription: any) => {
console.log("onSubscribe?");
subscription.request(1000000);
},
});
}我在UI中有一个按钮,如果单击该按钮,将调用方法retrieveNotifications,该方法将订阅后端requestStream.中的rsocket消息映射方法。
一切都很好,我可以看到我的回应。现在我的问题是,如果在我的服务器上有一个新的数据插入到数据库中,那么如何从我的后端服务器向前端发送一条通知消息,上面写着“嘿!新数据被推入数据库了。”我有点被困在服务器如何能够以某种方式使用火和忘记客户端。
发布于 2021-07-19 07:16:51
连接建立后,服务器端要向客户端发送请求.
您可以从服务器获得此连接的RSocketRequester,然后使用它创建四种方法(FNF、请求响应、请求流、流流)中的一种来向客户端发送请求。在客户端,您可以通过上述四种方法之一在EchoResponder类中接收数据.
发布于 2021-07-12 09:22:26
看起来您需要创建一个新的控制器函数,该函数返回一个空值,当您在DB中插入一个对象时,您将该对象从这个函数中传递到前端,然后按角度连接到它,就像您做的那样,up...try检查这个链接是否触发并忘记方法.希望这对https://www.baeldung.com/spring-boot-rsocket有帮助
https://stackoverflow.com/questions/67244656
复制相似问题