首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Spring (后端)和角( RSocket )将通知从服务器推送到客户端?

如何使用Spring (后端)和角( RSocket )将通知从服务器推送到客户端?
EN

Stack Overflow用户
提问于 2021-04-24 15:48:51
回答 2查看 1.3K关注 0票数 1

我计划在我的通知系统中使用RSocket。我想为我的后端(Java) RSocket使用Spring,而对于我的前端,我将使用rsocket-js。

我能够快速建立一个请求流交互模型,在这个模型中,我可以在我的系统中提取所有的通知。参见我后端的代码片段:

代码语言:javascript
复制
  @MessageMapping("streams")
  public Flux<Notification> requestStream() {

    log.info("Streaming to notifications...");

    return streamEventService.retrieveAllNotifications().log();

  }

现在,在我的前端,我有以下代码片段:

代码语言:javascript
复制
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消息映射方法。

一切都很好,我可以看到我的回应。现在我的问题是,如果在我的服务器上有一个新的数据插入到数据库中,那么如何从我的后端服务器向前端发送一条通知消息,上面写着“嘿!新数据被推入数据库了。”我有点被困在服务器如何能够以某种方式使用火和忘记客户端。

EN

回答 2

Stack Overflow用户

发布于 2021-07-19 07:16:51

连接建立后,服务器端要向客户端发送请求.

您可以从服务器获得此连接的RSocketRequester,然后使用它创建四种方法(FNF、请求响应、请求流、流流)中的一种来向客户端发送请求。在客户端,您可以通过上述四种方法之一在EchoResponder类中接收数据.

票数 1
EN

Stack Overflow用户

发布于 2021-07-12 09:22:26

看起来您需要创建一个新的控制器函数,该函数返回一个空值,当您在DB中插入一个对象时,您将该对象从这个函数中传递到前端,然后按角度连接到它,就像您做的那样,up...try检查这个链接是否触发并忘记方法.希望这对https://www.baeldung.com/spring-boot-rsocket有帮助

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67244656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档