2011-03-25 1 views
0

Ici, je travaille sur le but de simulateur de passerelle de la passerelle est de se connecter avec le centre de données et de flux vidéo au centre de données si le centre de données le demande.gérer 1000 + connexion en utilisant boost dans le client

Ici, le simulateur de passerelle peut simuler la passerelle 1000. Cela signifie que chaque passerelle se connectera avec le centre de données. Ici, je suis confus comment gérer autant de socket dans la passerelle.

En c + + select peut être utilisé à cette fin faire démultiplexer la connexion avec le centre de données.since ici, je dois créer 1000 connecter ne convient pas.

J'ai compris la gestion de plusieurs clients dans le serveur en prenant la méthode acceptor.async et le gestionnaire prendra de cela.

Mais depuis la passerelle est une application client

comment peut gérer la connexion multiple afin que je puisse obtenir la demande du centre de données pour chaque connexion.

La passerelle s'exécutera sur les deux fenêtres sous Linux.

Répondre

1

Si c'était mon problème à résoudre, je vais essayer d'abord avec libevent. Libevent sélectionne automatiquement le meilleur mécanisme disponible pour chaque plate-forme, que ce soit epoll ou kqueue ou select, et vous permet de vous concentrer sur ce qui est propre à votre programme.

+0

Je suppose que libevent ne fonctionnera pas sur Windows. –

+0

@chris_vr, devinez encore :) "Libevent devrait compiler sous Linux, * BSD, Mac OS X, Solaris et Windows". Certes, la dernière entrée de changelog qui mentionne spécifiquement Windows est un peu ancienne, mais elle est annoncée pour fonctionner. – sarnold

+0

Yeah Correct libevent fonctionne aussi bien sur windows.N'implémente pas epoll en utilisant boost.the problème que je ne connais pas libevent lib. –

3
  • Fenêtres: WSAEventSelect
  • Linux: epoll
  • FreeBSD: kqueue
+0

plz. Dites-moi les étapes en utilisant boost.Comment puis-je démultiplexer 1000 connexion si le client 100 connexion avec le même serveur (centre de données). –

+0

Il semble à la fois pour Linux et Windows, je dois prendre une stratégie différente pour cette situation.Ai-je raison? –

+0

@Chris_vr: Linux et Windows n'ont aucun problème à gérer 1000 connexions si vous utilisez les méthodes les plus efficaces de gestion des sockets. Je ne sais pas quel mécanisme de notification de socket boost :: asio utilise - mais les trois mécanismes que j'ai mentionnés ne devraient pas avoir de problèmes pour gérer 1000 connexions si elles sont utilisées correctement. – Erik

1

Je ne suis pas sûr de Boost.Asio - c'est peut-être possible, mais je devrais faire des recherches. Boost.Asio ne semble pas avoir d'implémentation qui appelle WSAWaitForMultipleEvents, donc je ne sais pas s'il existe un support pour ce dont vous avez besoin.

Dans Windows au moins WSAWaitForMultipleEvents est votre réponse. http://msdn.microsoft.com/en-us/library/ms742219(v=vs.85).aspx

+0

Il semble à la fois pour Linux et Windows, je dois prendre une stratégie différente pour cette situation.Ai-je raison? –

+0

Ce que vous avez suggéré est E/S avec chevauchement à droite –

+0

Les E/S superposées sont certainement la meilleure façon d'optimiser les performances, mais vous pouvez utiliser WSAWaitForMultipleEvents - vous pouvez envoyer un nombre de threads de travail pour gérer les connexions actives. –

Questions connexes