Question

Je conçois une application dans laquelle de nombreux clients se connectent à un serveur central. Ce serveur conserve ces connexions en envoyant des connexions persistantes toutes les demi-heures. Le serveur possède un serveur HTTP intégré, qui fournit une interface aux connexions client (par exemple, http: // serveur / isClientConnected ? id = id ). Je me demandais quelle est la meilleure façon de s'y prendre. Mon implémentation actuelle est en Java et je n'ai qu'une carte avec un ID comme clé, mais un thread est démarré pour chaque connexion et je ne sais pas si c'est vraiment la meilleure façon de le faire. Tous les indicateurs seraient appréciés.
Merci,
Isaac Waller

Était-ce utile?

La solution

Utilisez le package java.nio, comme indiqué sur cette page: Construction de serveurs hautement évolutifs avec Java NIO . Lisez également cette page très attentivement: Architecture d'un serveur hautement évolutif basé sur NIO .

Personnellement, je ne m'occuperais pas des composants internes du NIO et utiliserais un cadre tel que Apache MINA ou xSocket . NIO est compliqué et facile à se tromper de manière très obscure. Si vous le souhaitez & "Juste travailler &", Utilisez un framework.

Autres conseils

Avec un seul thread par connexion, vous pouvez généralement faire évoluer environ 10 000 connexions sur une seule machine. Pour un ordinateur Windows 32, vous atteindrez probablement une limite d'environ 1 000 connexions.

Pour éviter cela, vous pouvez modifier la conception de votre programme ou vous pouvez l’agrandir (horizontalement). Vous devez pondérer le coût de développement avec le coût du matériel.

Le seul thread par utilisateur, avec une seule connexion continue, est généralement le modèle de programmation le plus simple. Je resterais avec ce modèle jusqu'à ce que vous atteigniez les limites de votre matériel actuel. À ce stade, je décide de changer le code ou d’ajouter du matériel.

Si les clients doivent rester connectés pendant de longues périodes, l’affectation d’un thread par client peut poser problème. Chaque thread sur le serveur nécessite une certaine quantité de ressources (mémoire pour la pile, par exemple).

Vous pouvez utiliser Jetty Continuations pour traiter la demande du client avec moins de threads en utilisant servlets asynchrones.

En savoir plus sur le motif Reactor. Il existe une implémentation pour cela en Java (il utilise des canaux au lieu de thread pour le client). Il est facile à mettre en œuvre et très efficace.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top