我们使用Netty,版本4.1.13。我们创建HttpServer,HttpServerInitializer,HttpServerHandler并通过使用端口启动它。当我们从Chrome浏览器发出请求时,HttpServerInitializer会被调用3到4次(有时是3次,有时是4次),并在10秒后再次调用它。当我们制作时通过Microsoft Edge或通过控制台发出的请求,按预期调用一次,HttpServerHandler处理其余的请求。
我们应该怎么做才能防止HttpServerInitializer处理不必要的额外请求。我们在Initializer上附加了管道的会话操作,所以这对我们来说是一个关键问题。
答案 0 :(得分:0)
HTTP 1浏览器的默认行为是打开多个连接(多少取决于浏览器)并行执行请求。像这样,他们可以并行检索css,js,images等资源。
连接数可配置到浏览器中。通常,有两个首选项:主机名的最大连接数和打开的最大连接数。
另请参阅:http://www.browserscope.org/?category=network&v=0
因此,当您使用Chrome启动请求时,它会打开多个连接,即使在没有那么多请求的情况下只使用一个连接也是如此。空闲的未使用的连接将在几秒钟后关闭。
我认为这就是为什么你看到多次调用HttpServerInitializer,只是因为有几个连接。所以,服务器端,这是正常的,因为你不知道它是不同的客户端还是只有一个有很多连接的客户端。
我建议您不要对Connection Opened事件进行昂贵的操作,但仅限于您收到有效的消息/请求时。您的初始化程序应该只在管道上配置必要的处理程序,这些处理程序应该快速而简单,而不是其他任何处理程序。