2010-10-21 4 views
1

J'utilise des sockets python pour recevoir des demandes de style web et de savon. Le code que j'ai estUtilisation de sockets python pour recevoir de grandes requêtes http

import socket 
svrsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
host = socket.gethostname(); 
svrsocket.bind((host,8091)) 
svrsocket.listen(1) 
clientSocket, clientAddress = svrsocket.accept() 
message = clientSocket.recv(4096) 

Certaines des demandes de savon que je reçois, cependant, sont énormes. 650k énorme, et cela pourrait devenir plusieurs Mb. Au lieu de recv simple j'ai essayé

message = '' 
while True: 
    data = clientSocket.recv(4096) 
    if len(data) == 0: 
    break; 
    message = message + data 

mais je ne reçois jamais un bloc de données 0 octet avec Firefox ou Safari, bien que le python socket how to dit que je devrais.

Que puis-je faire pour contourner ce problème?

Répondre

1

Malheureusement, vous ne pouvez pas résoudre ce problème au niveau TCP - HTTP définit sa propre gestion des connexions, voir RFC 2616. Cela signifie essentiellement que vous devez analyser le flux (au moins les en-têtes) pour savoir quand une connexion pourrait être fermée.

Voir les questions apparentées ici - https://stackoverflow.com/search?q=http+connection

Questions connexes