Bonjour à tous,

Je sollicite votre aide car je suis confronté à un problème assez complexe et après beaucoup de recherche sur le net je n'ai pas vraiment trouvé de solution.

Je suis administrateur d'un réseau de sites communautaires (environs 40 sites) qui font plus de 40 millions de pages vues par mois en tout.

Les membres peuvent donc créer leur profil et se connecter au site. Je souhaite avoir une liste unique des membres connectés sur l'ensemble des sites. Les sites sont les mêmes mais compilés avec quelques paramètres différents. Ils sont en asp.net v2.0 et codés en vb.net.

Actuellement j'utilise une solution pour faire ma liste des connectés qui est complexe mais qui fonctionne. Cependant à mesure que le trafic augmente je sent que j'atteins les limites de ma solution.

Je vous explique ma solution actuelle :

Lorsqu'un membre est connecté, j'inclus un petit fichier flash (.swf) de 1*1 pixel sur l'ensemble des pages du site qui se connecte à un programme java via un socket. Le programme java maintien un tableau qui contient le thread qui établit la connexion entre le java et le flash sur la page de l'utilisateur.
Lorsque l'utilisateur change de page, le socket est donc fermé et le programme java lance un timer qui au bout de 20 minutes teste si l'utilisateur se trouve à nouveau dans la liste. Si il n'y est pas alors le membre est considéré comme déconnecté du site.
Si par contre l'utilisateur change juste de page, alors lorsque la nouvelle connexion s'établit avec le java il coupe le timer de la page précédente. Sans cette petite manip je me retrouvais avec plusieurs centaines de milliers de threads...

Ensuite pour pouvoir récupérer la liste des membres sur les sites, j'ai mis en place un serveur de remoting .NET. Le remoting se connecte au programme java via un socket, récupère la liste actuelle des connectés et construit une liste d'objet utilisable par les sites.

Enfin les sites se connectent à intervalles réguliers au remoting pour récuperer la dernière liste des connectés.

En utilisant le remoting j'évite que les 40 sites se connectent au java et construisent chacun la liste des connectés. Là c'est le remoting uniquement qui se connecte au java et la liste n'est construite qu'une seule fois.

Voila cette solution peut paraitre très complexe mais elle fonctionne et surtout le gros atout c'est que les connexions/déconnexions sont faites via un socket, je peux donc savoir précisément combien de personnes ont une page ouverte. Car ce que je voudrais vraiment c'est qu'une personne qui garde une page ouverte sur son ordinateur soit considéré comme connecté au site, même après plusieurs heures sans avoir vu d'autres pages. Et pour ça il ne peut y avoir qu'une solution à base de socket qui peut faire ça.

Par contre pour les moins le problème c'est que donc à chaque page vue il y a établissement d'une connexion tcp et donc énormément de threads aussi...
Et lors des pics de trafic (1500 utilisateurs) il y a des comportements étranges qui affectent IIS...

Donc je voudrais avoir vos avis existe-il une autre solution pour faire ça, sachant que tout ce qui se base sur les évènements session_start/session_end ne sont pas fiables du tout et que je préférerai éviter d'utiliser une base de données.

Merci d'avance pour vos réponses