2015-09-27 23 views

回答

2

如果您收到传入请求,则客户端与您的服务器有TCP连接。你不能只转发到另一台服务器。

你可以做的是返回一个301重定向响应,它应该使请求者尝试其他服务器。

另一种方法是自己从其他服务器获取数据并将其作为对原始请求的响应进行传递。你可以使用流管道。

是这样的:

Future handleRequest(HttpRequest request) { 
    return new HttpClient() // Or reuse an existing client if it happens often 
     .getUrl(createOtherServerUrl(request)) 
     .then((newRequest) => newRequest.close()) 
     .then((response) => response.pipe(request.response)); 
} 
0

管道是命令行shell功能。

当你的服务器接收到一个请求时,它可以创建一个新的请求到“另一台服务器”,并将从传入请求收到的数据发送到这个“另一台服务器”。

shelf_proxy可能会帮助你做到这一点。

+0

...和 ​​“管” 是methodes通过槽流至流处理程序 [达特文档](https://api.dartlang.org/133432/dart -async/Stream/pipe.html) 这就是我想要做的。但没有缓冲区本地所有的传入数据...我想通过(管道)直接传递给其他http服务 – 4stern

+0

确保管道是一个非常通用的概念,我假设你从命令行了解它们。 Dart中的流具有'pipe()'功能。如果你有一个输入流和一个输出流,你可以使用'outgoing.pipe(incoming)'来转发数据。您仍然需要为“其他服务”创建一个新的请求,以便首先获取外发流。 –

相关问题