问题描述
我正在尝试创建一个 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)
请求 n
数据实例,其中 n
是最大 int32
。但是,n
不是无限的。当服务器发送了 2147483647
个数据实例时会发生什么?客户端会停止接受新数据吗?如果是这样,当这种情况发生时你会怎么做,你如何知道它何时发生?另外,如果需要,您如何停止这个无限请求循环?
我想出了这个:
var subscription: ISubscription = null;
socket
.requestStream({
data: new Buffer('request-stream'),})
.subscribe({
onNext: value => {
console.log('%s',value.data)
someDataProcessing()
subscription.request(1)
},onSubscribe: sub => {
sub.request(1)
subscription = sub
},});
然而,在测试时我遇到了另一个问题——出于某种原因,在几次请求之后,请求循环结束。我不确定为什么会发生这种情况,但我猜这可能是因为 someDataProcessing()
可能会阻塞(例如遍历数据),这反过来会导致客户端“错过”新数据.我们可以通过将 1
增加到例如 5
来解决这个问题,但这会导致请求堆积如山,所以我不确定这是否是最佳解决方案。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)