BaseHTTPRequestHandler: how to read/write until diconnected

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Maksim Kasimov

    #1

    BaseHTTPRequestHandler: how to read/write until diconnected


    Hi,

    I'm trying to write an server-application, using BaseHTTPServer/BaseHTTPRequest Handler.

    When application is running, some client-application can post data to the server, and BaseHTTPRequest Handler reads all headers and posted raw data from "rfile", sends back response, than client/server session, than session closed - that works just fine.

    how to check whether some data posted again by the client in the session, and send response again in one session (and do such iterations util client stops to post data) ?




    something like this:

    class ServerChannel( BaseHTTPServer. BaseHTTPRequest Handler ):

    def do_POST(self):

    while needReadMessage :
    ...
    msg_count += 1
    log.info( "message number %d arrived" % msg_count )
    raw_post_data = self.rfile.read ( contentLength )
    ...
    self.wfile.writ e( respContent )


    many thanks for help.


    --
    Maksim Kasimov
  • notanotheridiot

    #2
    Re: BaseHTTPRequest Handler: how to read/write until diconnected


    Maksim Kasimov wrote:
    I'm trying to write an server-application, using BaseHTTPServer/BaseHTTPRequest Handler.
    >
    When application is running, some client-application can post data to the server, and BaseHTTPRequest Handler reads all headers and posted raw data from "rfile", sends back response, than client/server session, than session closed - that works just fine.
    >
    how to check whether some data posted again by the client in the session, and send response again in one session (and do such iterations util client stops to post data) ?
    >
    BaseHTTPServer is precisely that, a HTTP server. what you are
    describing is not (I'm pretty sure) not HTTP.
    HTTP/1.1 can do something similar and is supported by BaseHTTPServer:
    with HTTP/1.1 the stream is not closed between requests. This relies on
    a Content-Length field being present in all communications from the
    server to the client. To enable HTTP/1.1 you have to set the
    protocol_versio n attribute of your BaseHTTPRequest Handler derived class
    to "HTTP/1.1" .

    A little while back I wrote a small guide to HTTP in the context of
    BaseHTTPServer: http://crunchy.python-hosting.com/wiki/HttpServer

    If (as I think) you want to send multiple, inter-dependent messages
    each way under the aegis of one HTTP request, you should probably look
    at sublassing TCPServer (you can, and probably should, still use
    mimetools.Messa ge to parse headers though).

    Comment

    Working...