MULTI-SERVEUR | EXEMPLE POUR LE TUTORIAL DE CELIPHANE | ADRESSE : HTTP://WWW.VBF

celiphane Messages postés 466 Date d'inscription samedi 16 février 2002 Statut Membre Dernière intervention 20 avril 2007 - 15 nov. 2003 à 04:43
KnightCamper Messages postés 5 Date d'inscription mercredi 28 janvier 2004 Statut Membre Dernière intervention 4 juillet 2004 - 20 mai 2004 à 14:12
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/17948-multi-serveur-exemple-pour-le-tutorial-de-celiphane-adresse-http-www-vbfrance-com-code-aspx-id-4644

KnightCamper Messages postés 5 Date d'inscription mercredi 28 janvier 2004 Statut Membre Dernière intervention 4 juillet 2004
20 mai 2004 à 14:12
Quand je telecharge le zip on me dis qu il est invalide.
Ensperant que la source soit réactualiser.
Scooby1 Messages postés 48 Date d'inscription dimanche 12 mai 2002 Statut Membre Dernière intervention 26 novembre 2003
21 nov. 2003 à 23:00
Ouais en faite ma source est juste car j'utilise ton systeme sauf qu'il y a trois Winsock sur mon serveur car j'y ai mis un des clients avec. donc ton code foctionne c'est juste que je me suis un peu emmèler les pinceaux, toutes mes excuses.

Donc ma sources est juste et peut donc servir d'exemple pour ton tutorial.

@+
celiphane Messages postés 466 Date d'inscription samedi 16 février 2002 Statut Membre Dernière intervention 20 avril 2007
16 nov. 2003 à 19:21
ha mais ya pas de problème, je disais ca moi aussi dans un but pédagogique, je maintiens que ta remarque est tout à fait bonne et pertinente.
Merci pour les encouragements !

@+
Celiphane
cs_sub-zero Messages postés 98 Date d'inscription mercredi 22 novembre 2000 Statut Membre Dernière intervention 12 juillet 2005
16 nov. 2003 à 11:03
Oui ca fontionne, j ai deja testé ;) ms le pb réside ds la perte de performences (boucle d attente et timer dans les deux cas ca raltentit ) . quoi qu'il en soit, le multi connect que tu évoques résoud 90% des besoins et est BEAUCOUP plus facile a mettre en place pour la plupart des programmeurs. J'ai juste voulu en préciser les limites.

Bonne continuation et très bon tuto.
@++
celiphane Messages postés 466 Date d'inscription samedi 16 février 2002 Statut Membre Dernière intervention 20 avril 2007
15 nov. 2003 à 17:41
ha oui, au fait sub-zero, ta remarque n'est pas totalement fondée ! (j'y pense maintenant que j'y réfléchi, notamment au niveau de ton exemple...)
As-tu déjà expérimenté et mis en oeuvre un système d'aquiescement de réception de données ? une sorte d'accusé de réception.
Principe :
A envoie à B
B confirme réception et bon traitement à A (ou qui tu veux)
A (ou qui tu veux) fait son envoie
et ainsi de suite

Où demeure l'engorgement ? ;)
j'en parle dans mon tutorial, ou dans les commentaires je sais plus, en tout cas si je l'ai omis alors désolé, c'est une grossière erreur, excusez m'en.
Ceci résout tout, comme je l'ai déjà indiqué, c'est l'algo qui fait la différence. A vous d'imaginez vos solutions à vos limites !

@+
Celiphane
celiphane Messages postés 466 Date d'inscription samedi 16 février 2002 Statut Membre Dernière intervention 20 avril 2007
15 nov. 2003 à 17:36
très bonne remarque.
en effet je vois bien le pb que tu évoques, je l'ai d'ailleurs déjà expérimenté, mais seulement dans le cas d'un pseudo jeu réseau qui nécessite l'envoi permanent des coordonnées des joueurs, et là en effet, c'est l'engorgement. Merci pour la solution que tu apportes, de toute facon il est clair qu'il n'y en a pas 36 !
Cela dit, le multiconnect le plus fréquent est bien celui énoncé, et tu en conviendra. Simple et fonctionnel, il contente dans la plupart des cas le développeur en herbe.

Merci à vous 2 pour ces éclaircissements.

@+
Celiphane
cs_sub-zero Messages postés 98 Date d'inscription mercredi 22 novembre 2000 Statut Membre Dernière intervention 12 juillet 2005
15 nov. 2003 à 14:17
le problème de cette méthode Céliphane se situe au niveau du traitement de dataarrival() des MonWck. En fait ils sont Indexés et crées dynamiquement par un LOAD ms il demeure une seule procédure commune pour tous les controles.

Je m explique, dans le cas d une lourde opération comme un transfert de fichier par exemple, il faut libérer les function Dataarrival aun plus vite et dispatcher les traitements pour éviter de mettre en attente les autres controles winsock (qui sont distingués par un index différent seulement mais tous les contrôles utilisent la même événement dataarrival, d ou un risque sérieux d'engorgement et de saturation)

la seule solution pour créer un multi serveur relativement performant est de se baser sur un modèle multi threads, donc orienté tout objet, avec un thread différent pas connexion afin d éxécuter simultanément les traitements et éviter les engorgements. L'implémentation est certes un peu plus difficile.
celiphane Messages postés 466 Date d'inscription samedi 16 février 2002 Statut Membre Dernière intervention 20 avril 2007
15 nov. 2003 à 04:58
tu m'as demandés une explication sur le fonctionnement,
l'explication la voila la voici :

j'ai 4 progs : srv, clt1, clt2, clt3

srv possède :
- un winsock indexé, nommé MonWck
- un winsock serveur, nommé MonSrv

clt1, 2, 3 et 4 possède :
- un winsock, nommé MonWckClt

je lance srv, au démarrage il passer le winsock MonSrv en écoute de connexion.


je lance clt1, au démarrage il se tente de connecter son MonWckClt à MonSrv

MonSrv reçoit la demande de connexion, il génère un nouveau MonWck tout frais

Le nouveau MonWck prend la demande de connexion de MonWckClt de clt1

A ce point, nous avons un "tuyau" établit entre srv et clt1, par le biais de MonWckClt de clt1 ainsi que le nouveau MonWck de srv, "tuyau" dans lequel le débit peut passer.

je lance clt2, au démarrage il se tente de connecter son MonWckClt à MonSrv

MonSrv reçoit la demande de connexion, il génère un nouveau MonWck tout frais

Le nouveau MonWck prend la demande de connexion de MonWckClt de clt2

A ce point, nous avons un second "tuyau" établit entre srv et clt2, par le biais de MonWckClt de clt2 ainsi que le nouveau MonWck de srv, en plus du premier "tuyau".

L'opération va se répéter avec clt3

Maintenant, nous avons la configuration suivante :
srv est relié à clt1 par un "tuyau"
srv est relié à clt2 par un "tuyau"
srv est relié à clt3 par un "tuyau"

Le débit dans un "tuyau" passe dans les 2 sens (émission ET réception).

srv veut communiquer avec clt1 ? il utilise la liaison établit à cet effet
clt2 veut communiquer avec srv ? il utilise la liaison établit à cet effet
clt3 veut communiquer avec clt1 ? il envoie les données à srv avec un code pour que ces données soient réacheminer vers clt1. C'est juste de l'algo...

Voici schématiquement un multiconnect fonctionnel, avec 2 winsocks côté serveur et un winsock par client.

Je pense avoir été plus clair ainsi ;)

@+
Celiphane
celiphane Messages postés 466 Date d'inscription samedi 16 février 2002 Statut Membre Dernière intervention 20 avril 2007
15 nov. 2003 à 04:43
Premièrement, merci pour l'intérêt porté à mon tutorial, et merci pour la source Zip, tout ca fait preuve de très bonne volonté pour la communauté !

Le seul petit point qui m'embête vois-tu, c'est que non, désolé (c'est bien tenté ;) !), mon petit tuto n'a pas d'erreur ! Un multiconnect ne nécessite que 2 winsocks sur le serveur, et un winsock par client ! relis bien le tuto et refais-le point à point, je t'assure que la solution énoncée est LA solution ;)
Désolé si ma syntaxe et mon parler ne sont pas clair ! J'ai voulu faire simple et rapide, peut-être un peu trop ! ;)

Et pour ne pas faire de doublons, je ne vais pas poser à mon tour un exemple correct de multiconnect, je me contenterai de te faire confiance en ce qui concerne le remaniement de ta source pour qu'elle "colle" au tuto (avec 2 wck pour le srv), et je préciserai juste également aux autres que j'ai parmi mes autres sources une source "chat", avec un multiconnect !

Voilà, voilà !

Sur ce, merci encore à tous pour vos commentaires et votre participation à rendre l'utilisation de ce winsock plus clair, que diable ! Merci Scooby1 pour ton adaptation !

[[
astuce pour le remaniement : honnetement, a quoi sert ton bouton connection sur la form du serveur, ainsi que le winsock wck(0) de cette meme feuille ? vire les, vire le code correspondant, et voila un multiconnect propre et correct : 1srv avec 2 wck et 3 clt, !
ha oui aussi, faut changer la procédure
Private Sub Wck_Close(Index As Integer)
Unload Wck(Index)
If Wck.Count 0 Then nb 0
End Sub
en mettant le Serv à la place de Wck, et le tour est joué !
Bravo encore !
]]

@+
Celiphane
Rejoignez-nous