IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau/Web Python Discussion :

Python HTTP Multi User


Sujet :

Réseau/Web Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2009
    Messages : 6
    Par défaut Python HTTP Multi User
    Bonjour

    j'écris un petit serveur HTTP en python très basic.
    Cependant, je bute contre un problème.

    Imaginons la scène suivante:
    Mon serveur écoute le port 80 et attend les requêtes GET, POST, etc... des utilisateurs. Un utilisateur envoi:

    "GET /image.jpg HTTP/1.1"

    Mon serveur lit alors le fichier image.jpg de 500ko et l'envoie par petite partie au client.

    Le problème est que durant toute cette opération, le serveur est injoignable car le port 80 est occupé par le transfert de fichier.

    Quelle est la solution à ce problème :S ?

    Attention il y a une contrainte: je suis derrière un routeur sur lequel seul le port 80 est ouvert (impossible d'en ouvrir d'autres)

    Merci bien
    Kursion

  2. #2
    Membre émérite
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Par défaut
    Dans le code de ton serveur, il faut bien dissocier le socket serveur et le socket client.

    Lorsque ton serveur accepte une connexion, il te retourne un nouveau socket qui correspond à la liaison avec le client. La manière dont il te le donne dépend de ce que tu utilises, aussi je te propose de poster le bout de code concerné.

    Ce n'est en aucun cas sur le socket serveur directement que tu dois écrire tes données, mais bien sur ce socket client reçu.


    Mais sans le bout de code où tu acceptes le client et celui où tu lui envoies les données, impossible de te donner plus d'explications sur ton souci.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2009
    Messages : 6
    Par défaut
    Voici le serveur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    # Echo server program
    import socket, time, threading
     
    HOST = '127.0.0.1'   
    PORT = 80            
     
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.bind((HOST, PORT))
    s.listen(5)
     
     
    class MyThread ( threading.Thread):
     
    	def __init__ ( self, oSock):
    		self.s = oSock
    		threading.Thread.__init__ ( self )
     
    	def run ( self):
    		self.conn, self.addr = self.s.accept()
    		self.data = self.conn.recv(1024)
     
    		print('Connected by', self.addr)
    		print(str(self.data, "UTF8"))
    		print("-----------------------")
    		self.req = b"HTTP/1.1 200 OK\nConnection: close\nContent-Type: text/html\r\n\n"
    		self.req2 = b"<h1>Salut</h1>"
     
    		print(str(self.req, "UTF8"))
     
    		self.conn.send(self.req)
    		while 1:
    			time.sleep(3)
    			try:
    				self.conn.send(self.req2)
    			except:
    				print("Connexion from "+addr+" finished")
    				break
     
    		self.conn.close()
     
    MyThread(s).start()
    MyThread(s).start()
    Voilà le problème c'est que si une personne demande le serveur via son naviguateur, il n'y aura pas de problème... mais si une deuxième personne arrive... la demande sera placée en attente :s

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2009
    Messages : 6
    Par défaut
    le soucis a été réglé

  5. #5
    Membre émérite
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Par défaut

  6. #6
    Membre Expert Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Par défaut
    Peux-tu expliquer comment tu as résolu ton problème, peut être d'autre sont-ils intéressés, merci.

    (et n'hesite pas à utiliser le bouton résolu, merci )

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Variables d' application communes multi users
    Par giheller dans le forum Langage
    Réponses: 9
    Dernier message: 28/08/2006, 17h42
  2. [Développement] Application multi user
    Par Vesta dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 25/04/2006, 22h52
  3. VBA-E] Mots de passe multi-users
    Par Igloobel dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 03/10/2005, 21h09
  4. Design d'une base multi-user
    Par Aurelien.Regat-Barrel dans le forum Langage SQL
    Réponses: 4
    Dernier message: 29/08/2005, 12h13
  5. Réponses: 2
    Dernier message: 14/03/2004, 16h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo