socket: faire tourner plusieurs serveurs sur le meme port [Java] - Java - Programmation
Marsh Posté le 17-11-2003 à 01:59:15
normalement on peut pas, puisque justement le port est l'identifiant de l'application.
Une feinte courante pour ce problème consiste à mettre un mini-serveur sur le port, qui va répartir les requêtes aux bonne applications, à partir des critères à définir.
Mais c'est une mauvaise idée : un port -> une application.
Marsh Posté le 17-11-2003 à 02:47:37
nraynaud a écrit : |
c'est pour tester mon application parceque ma machine n'est pas en reseau.
Ou je peux trouver ce miniserveur? parceque wmware c'est lent et ca bouffe une place monstre
Marsh Posté le 17-11-2003 à 12:08:12
tu t'en fous, tu dois probablement avoir toute la partie réseau installée dans ton OS, tu peux donc ouvrir le serveur sur le port 80 de ta machine et ouvrir le navigateur sur la même machine pointé vers http://localhost:80/
Par contre je ne comprends pas pourquoi tu veux avoir plusieurs serveurs en même temps sur le même port.
Marsh Posté le 19-11-2003 à 15:59:57
Imagines un logiciel de chat ou tu as une socket server sur un port qui tourne en background et qui attend des messages, et une partie client qui envoie des messages.
Imagine tu as une seule machine chez toi qui n'est pas connecte sur Internet donc pas moyen de lancer une instance du programme sur un machine A et une autre instance sur une machine B.
Comment tu fais pour TESTER le programme (le faire communiquer donc au moins 2 instances) a part modifier les ports ou lancer un emulateur (wmware) avec une 2e pile tcp-ip ?
Je sais tres bien que l'on peut faire http://localhost:80/ sur une machine non connecte a Internet
Marsh Posté le 19-11-2003 à 16:24:03
tanguy a écrit : Imagines un logiciel de chat ou tu as une socket server sur un port qui tourne en background et qui attend des messages, et une partie client qui envoie des messages. |
Oulà, il faut laisser les machines se débrouiller pour les clients dans la mesure du possible.
si tu as un client/serveur tout bête :
tu fais le "bind" du serveur sur un port connu (ce sera le point de rendez-vous des machines) mais dans les clients, il faut ouvrir tes sockets vers le serveur sans préciser le port par lequel tu sors, le système en trouvera un tout seul (en fonction de la place libre), ça t'évite tout un tas de problèmes.
si ce sont des "serveurs" qui parlent entre eux :
Je ne suis pas sur d'avoir compris, mais si tu as des programmes symétriques (style des serveurs IRC qui se répartisseent les messages qu'ils reçoivent chacun de leurs clients respectifs), rajoute une option de ligne de commande à ton programme qui lui dira qu'il doit utiliser les ports passés en paramètres (celui qu'il doit écouter pour ses clients, celui qu'il doit écouter de la part de l'autre serveur et celui auquel il doit contacter l'autre serveur).
Marsh Posté le 19-11-2003 à 17:08:32
nraynaud a écrit : |
J'avais pas pense a ca: je lance plusieurs fois le meme serveur sur different ports, mais bon c'est pas la solution parfaite. La solution parfaite est celle qui represente le mieux la realite.
Bon j'ai une autre analogie. un logiciel P2P (decentralise, sans serveur) quand tu chat avec ou echange un fichier il y a un serveur qui ecoute en background sur un port pour recevoir des commandes, des messages de chat ect... puis aussi une partie client pour envoyer des commandes (GET filename...) et des messages de chat. Maintenant imagine que tu tests ce logiciel sur une seule machine (donc une pile tcp-ip), comment tu fais?
Le truc c'est que si tu as des liens sur cette histoire de mini-serveur ca m'interesse (ton premier post dans ce topic).
Marsh Posté le 19-11-2003 à 17:16:33
tanguy a écrit : |
Non, tu va trouver des trucs sur la répartition de charge mais pas sur ça.
En plus c'est pas adapté à ton cas.
Passe par des sockets unix pour tes tests ?
Marsh Posté le 19-11-2003 à 17:30:52
> Passe par des sockets unix pour tes tests ?
ils ont quoi de speciaux les sockets unix? ou tu parles de l'instruction select()? comment pluguer ca sur mon programme fait en Java ?
Marsh Posté le 19-11-2003 à 17:43:13
tanguy a écrit : ils ont quoi de speciaux les sockets unix? ou tu parles de l'instruction select()? comment pluguer ca sur mon programme fait en Java ? |
Je parle pas de select, qui n'a rien à voir.
Les sockets unix passent par le système de fichier pour le nommage (ce qui t'intéresse) et sont plus rapides (ça tu t'en fout) et ne marchent pas au travers du réseau (c'est une conséquence du fait que ça t'intéresse) .
Marsh Posté le 17-11-2003 à 01:45:54
Comment faire tourner plusieurs applications qui ecoutent sur le meme port en mode serveur ?
genre imaginer plusieurs serveurs HTTP qui ecoutent sur le meme port 80 sur la meme machine et les faire communiquer entre eux.
Pour le moment j'ai pas trouve mieux de lancer un process dans mon OS puis de simuler un autre OS avec wmware pour lancer un second process et pouvoir ainsi tester mon application puisque j'ai pas d'acces a d'autre machines en reseau.
Connaissez vous une solution moins contraignante au niveau de l'OS ou de Java qui permette de faire ca ? une simulation de sockets quoi
Sinon tant pis je continue avec wmware ou alors je charge un fichier de conf pour modifier les ports de mes sockets, mais ca implique que je pourrais pas tester plus de 2 applications en meme temps facilement.