【发布时间】:2011-06-12 01:18:03
【问题描述】:
com.sun.net.httpserver.HttpServer 是否支持单连接流水线?它似乎是并行处理多个客户端,但单个连接的请求是串行执行的。
这是否准确,如果是,有没有办法解决这个问题?
【问题讨论】:
标签: java http pipelining com.sun.net.httpserver
com.sun.net.httpserver.HttpServer 是否支持单连接流水线?它似乎是并行处理多个客户端,但单个连接的请求是串行执行的。
这是否准确,如果是,有没有办法解决这个问题?
【问题讨论】:
标签: java http pipelining com.sun.net.httpserver
符合 HTTP 1.1 的 HTTP 服务器应该支持流水线。请注意,客户端也应该支持流水线。
根据httpserver
API 提供了部分 RFC 2616 (HTTP 1.1) 的实现 和 RFC 2818(基于 TLS 的 HTTP)。
这似乎暗示com.sun.net.httpserver.HttpServer 不完全支持HTTP1.1。HttpURLConnection 不支持流水线,所以我倾向于认为com.sun.net.httpserver.HttpServer 也不支持流水线。
你说你做了一些测试。你是如何测试这个的?
更新:
从注释看来,流水线是受支持的。
如果如您所说,您通过管道发送请求,则响应应根据请求的到达返回(与完成每个请求所需的时间无关,即有些比其他请求更快)。
【讨论】:
HTTP 流水线意味着非常简单的事情:客户端可以将下一个请求写入连接,而无需读取上一个响应。
任何http服务器都很难不支持流水线。它必须向前看,如果它发现超出当前请求的可用字节,它需要中止......但这很荒谬,没有人这样做。
这与服务器如何处理请求无关 - 串行或并行。并行做当然更难,有一些问题是必须要解决的。
【讨论】: