2011-01-19 121 views

回答

0

HTTP服务器符合HTTP 1.1预计支持流水线。请注意,流水线应该也被客户端支持。
根据httpserver

API提供一个局部 执行RFC 2616的(HTTP 1.1) 和RFC 2818(HTTP超过TLS)。

它似乎意味着com.sun.net.httpserver.HttpServer不完全支持HTTP1.1。
HttpURLConnection不支持流水线操作,所以我倾向于认为com.sun.net.httpserver.HttpServer不支持流水线操作。
你说你做了一些测试。你是怎么测试这个的?

更新
从音符似乎流水线支持。
如你所说你发送流水线请求,响应应该根据请求的到达而回来(与完成每个请求所用的时间无关,即有些比其他请求快)。

+0

我通过创建一个处理两个请求的服务器来测试它,一个睡眠,一个不睡,一个流水线客户端。创建两个连接不会彼此阻塞(由服务器并发执行),但在同一个连接上执行一个缓慢的跟随快速请求会导致快速等待缓慢完成。该文档还补充道,“API不提供的任何HTTP功能都可以通过使用API​​的应用程序代码实现。”如果你对如何最好地解决这个问题有任何想法,我会很感激听到他们。 – Brian 2011-01-19 21:50:21

+0

@Brian:如果我理解正确:您使用的是流水线客户端(您的实现?),并且您通过相同的HTTP连接发送了2个请求。一个很慢,然后是一个fast.I不知道您的意思,但在如果客户端将Req1,Req2发送到服务器,那么服务器需要发送Req1响应,然后响应Req2。即服务器必须按照收到请求的顺序发送响应到请求。所以从你的描述来看,这似乎确实发生在你的案例中,因为快速请求是在缓慢后发送的。 – Cratylus 2011-01-20 07:57:08

0

HTTP流水线意味着一件非常简单的事情:客户端可以在未读取先前响应的情况下将下一个请求写入连接。

任何http服务器都不支持流水线操作确实很困难。它必须向前看,如果它发现超出当前请求的可用字节,则需要中止......但这很荒谬,而且没有人这么做。

这与服务器处理请求的方式无关 - 串行或并行处理。平行进行当然更困难,而且还有一些问题必须解决。