Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 如何在RSocket JS中执行无限requestStream()?当subscription.request()用完时会发生什么?_Typescript_Spring Boot_Rsocket_Rsocket Js - Fatal编程技术网

Typescript 如何在RSocket JS中执行无限requestStream()?当subscription.request()用完时会发生什么?

Typescript 如何在RSocket JS中执行无限requestStream()?当subscription.request()用完时会发生什么?,typescript,spring-boot,rsocket,rsocket-js,Typescript,Spring Boot,Rsocket,Rsocket Js,我试图创建一个rsocketjs客户端监听Spring引导服务器的情况。当服务器有一些客户机数据时,它会发送这些数据,客户机onNext()会触发并开始处理/显示这些数据。很简单,对吧 我已经看到了很多例子,包括来自官方rsocketjs存储库的一个,提出了这种设置: socket .requestStream({ data: new Buffer('request-stream'), metadata: null, }) .s

我试图创建一个rsocketjs客户端监听Spring引导服务器的情况。当服务器有一些客户机数据时,它会发送这些数据,客户机onNext()会触发并开始处理/显示这些数据。很简单,对吧

我已经看到了很多例子,包括来自官方rsocketjs存储库的一个,提出了这种设置:

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)
请求
n
数据实例,其中
n
是最大
int32
。然而,
n
不是无限的。当服务器发送了
2147483647
数据实例时会发生什么情况?客户端是否会停止接受新数据?如果是这样的话,当这种情况发生时,你会怎么做?你怎么知道什么时候发生了?另外,如果需要的话,如何停止这个无限请求循环

我想到了这个:

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()
可能会阻塞(例如,在数据中循环),从而导致客户端“错过”新数据。我们可以通过将
1
增加到例如
5
来解决这个问题,但这会导致请求堆积,因此我不确定这是否是最佳解决方案