2

我正在尝试创建 RSocket JS 客户端侦听 Spring Boot 服务器的情况。当服务器有一些数据给客户端时,它会发送它并且客户端 onNext() 触发并开始处理/显示该数据。很简单,对吧?

我看过很多例子,包括来自官方 RSocket-JS 存储库的一个例子,提出了这种设置:

socket
      .requestStream({
        data: new Buffer('request-stream'),
        metadata: null,
      })
      .subscribe({
        onNext: value => console.log('%s', value.data),
        onSubscribe: sub => sub.request(2147483647),
      });

这里sub.request(2147483647)请求maxn所在的数据实例。然而,并不是无限的。当服务器发送数据实例时会发生什么?客户端会停止接受新数据吗?如果是这样,当这种情况发生时你会怎么做?你怎么知道它何时发生?另外,如果需要,你如何停止这个无限请求循环?nint32n2147483647

我想出了这个:

var subscription: ISubscription = null;
socket
    .requestStream({
        data: new Buffer('request-stream'),
        metadata: null,
    })
    .subscribe({
        onNext: value => {
            console.log('%s', value.data)
            someDataProcessing()
            subscription.request(1)
        },
        onSubscribe: sub => {
            sub.request(1)
            subscription = sub
        },
    });

然而,在测试这个时我遇到了另一个问题——出于某种原因,在几个请求之后,请求循环结束了。我不确定为什么会发生这种情况,但我猜这可能是因为someDataProcessing()它可能会阻塞(例如循环数据),这反过来会导致客户端“错过”新数据。我们可以通过增加1to 来解决这个问题,例如,5但这会导致请求堆积,所以我不确定这是否是最好的解决方案。

4

0 回答 0