Stream Dart同时路由到多个客户端

Stream Dart同时路由到多个客户端,stream,dart,server-side,routes,Stream,Dart,Server Side,Routes,我的Dart服务器有问题。我正试图向多个客户发送一些信息,但当他们请求时,我没有这些信息可供他们使用。这意味着我正在使用Future,当Future完成后,我将把数据发送回客户端 问题在于,当第一个将来的仍在等待完成时,服务器将不允许第二个(或更多)客户端连接到服务器 下面是一个例子: 导入“dart:async”; 导入“dart:io”; 导入“package:route/server.dart”; void main(列表参数){ HttpServer.bind(“localhost”,5

我的Dart服务器有问题。我正试图向多个客户发送一些信息,但当他们请求时,我没有这些信息可供他们使用。这意味着我正在使用
Future
,当
Future
完成后,我将把数据发送回客户端

问题在于,当第一个
将来的
仍在等待完成时,服务器将不允许第二个(或更多)客户端连接到服务器

下面是一个例子:

导入“dart:async”;
导入“dart:io”;
导入“package:route/server.dart”;
void main(列表参数){
HttpServer.bind(“localhost”,5000)
.然后((HttpServer服务器){
路由器=新路由器(服务器)
…发球(“/multi”)。倾听(\u multi);
});
}
void\u multi(HttpRequest请求){
打印(“等待”);
新计时器(新持续时间(秒数:5),(){
打印(“回复”);
请求。响应。写(“你好”);
request.response.close();
});
}
基本上,如果您一次只有一个客户端连接,那么这种方式工作得非常好。但是,如果您有多个客户端,则连接的第一个客户端将阻止第二个客户端,直到第一个客户端的连接关闭

我还尝试使用
.service(“/multi”).asBroadcastStream()…
,因为我认为这将允许多个订阅者,但它们具有相同的行为

有办法做到这一点吗


谢谢。

您可以指定一个隔离点来收集数据,并指定几个隔离点来处理客户请求(使用您在评论中提到的问题中讨论的策略)

您的所有请求处理隔离都可以连接到一个数据收集隔离并阻止,直到数据可用。
数据收集隔离可以缓存数据,以便为每个后续请求提供相同的数据

我还没有太多地使用隔离,我不知道几个隔离(请求处理程序)是否可以使用端口连接到同一个隔离(数据采集程序),以及这是否起作用以及它的行为方式。

如果这不起作用,我相信几个隔离(请求处理程序)可以使用TCP连接到一个隔离(数据采集器)。

您可以指定一个隔离来收集数据,几个隔离分别处理客户端请求(使用您在评论中提到的问题中讨论的策略)

您的所有请求处理隔离都可以连接到一个数据收集隔离并阻止,直到数据可用。
数据收集隔离可以缓存数据,以便为每个后续请求提供相同的数据

我还没有太多地使用隔离,我不知道几个隔离(请求处理程序)是否可以使用端口连接到同一个隔离(数据采集程序),以及这是否起作用以及它的行为方式。

如果这不起作用,我确信几个隔离(请求处理程序)可以使用TCP连接到一个隔离(数据采集器)。

我很肯定它不会阻止任何请求。我认为是您的客户机(浏览器?)将连接排队,只使用一个套接字(可能使用keep alive)。这对于浏览器来说是非常正常的,以将使用中的套接字数量保持在最低限度


Dart服务器设计用于同时处理多个请求,路由器包也不例外。

我很肯定它不会阻止任何请求。我认为是您的客户机(浏览器?)将连接排队,只使用一个套接字(可能使用keep alive)。这对于浏览器来说是非常正常的,以将使用中的套接字数量保持在最低限度


Dart服务器设计用于同时处理多个请求,路由器包也不例外。

只是从侧面看到了这一点。我来看看。那也没什么帮助。我还是被困在这里,就在旁边看到了。我来看看。那也没什么帮助。我还在这里。是的,我应该提到我的客户是一个浏览器。我相信你是对的。我试着用两个Chrome标签连接,它正在排队,但在Chrome和Firefox上,它的工作方式和我预期的一样。谢谢。是的,我应该提到我的客户是一个浏览器。我相信你是对的。我试着用两个Chrome标签连接,它正在排队,但在Chrome和Firefox上,它的工作方式和我预期的一样。谢谢