Typescript 如何在RSocket JS中执行无限requestStream()?当subscription.request()用完时会发生什么?
我试图创建一个rsocketjs客户端监听Spring引导服务器的情况。当服务器有一些客户机数据时,它会发送这些数据,客户机onNext()会触发并开始处理/显示这些数据。很简单,对吧 我已经看到了很多例子,包括来自官方rsocketjs存储库的一个,提出了这种设置: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
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
来解决这个问题,但这会导致请求堆积,因此我不确定这是否是最佳解决方案