2017-07-27 2 views
0

Nous utilisons Netty, la version 4.1.13. Nous créons HttpServer, HttpServerInitializer, HttpServerHandler et le démarrer en utilisant un port.Lorsque nous faisons une demande de Chrome Browser, HttpServerInitializer est appelé 3 ou 4 fois (parfois 3, parfois 4) et il est appelé à nouveau après 10 secondes.Quand nous faisons une demande via Microsoft Edge ou via la console, elle est appelée une fois comme prévu et HttpServerHandler gère le reste. Que devons-nous faire pour empêcher HttpServerInitializer de gérer des demandes supplémentaires inutiles? Nous avons des opérations de session attachées à pipeline sur Initializer, c'est donc un problème critique pour nous.Netty HttpServer Chrome demandes multiples de navigateur

Répondre

0

Le comportement par défaut des navigateurs pour HTTP 1 est d'ouvrir plusieurs connexions (combien dépend du navigateur) pour effectuer des requêtes en parallèle. Comme ça, ils peuvent récupérer des ressources comme css, js, images, ... en parallèle.

Le numéro de connexion est configurable dans le navigateur. En général, il y a deux préférences: le nombre maximum de connexions par nom d'hôte et le nombre maximum total de connexions ouvertes.

Voir aussi: http://www.browserscope.org/?category=network&v=0

Ainsi, lorsque vous démarrez une demande avec Chrome, il ouvre plusieurs connexions, même si elle utilise un seul s'il n'y a pas tellement fait la demande. Les connexions inactives et inutilisées seront fermées après quelques secondes.

Je pense que c'est la raison pour laquelle HttpServerInitializer est appelé plusieurs fois, uniquement parce qu'il y a plusieurs connexions. Donc, côté serveur, c'est normal, parce que vous ne savez pas s'il s'agit de clients différents ou d'un seul avec beaucoup de connexions.

Je vous conseille de ne pas faire d'opération coûteuse sur l'événement Connection Opened, mais seulement quand vous recevez un message valide/demande. Votre initialiseur devrait seulement configurer les gestionnaires nécessaires sur le pipeline qui devrait être rapide et simple, et rien d'autre.