The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

IOMux::HTTP::Client - HTTP client implementation

INHERITANCE

 IOMux::HTTP::Client
   is a IOMux::HTTP
   is a IOMux::Net::TCP
   is a IOMux::Handler::Read
   is a IOMux::Handler

   IOMux::Net::TCP also extends IOMux::Handler::Write
   is a IOMux::Handler::Write
   is a IOMux::Handler

SYNOPSIS

  my $socket = IO::Socket::INET->new(@sock_params);
  my $socket = IO::Socket::SSL->new(@sock_params);
  my $client = IOMux::HTTP::Client->new(socket => $socket);
  $mux->add($client);

  # or in one go:
  my $client = $mux->add(IOMux::HTTP::Client->new(@sock_params));

DESCRIPTION

Handles a HTTP/1.1 connection to a HTTP server, for IOMux based applications only. The multiplexer allows one application to sent requests and receive answers from multiple servers in parallel in one single process.

WARNING: Writing event driven programs in a challenge.

METHODS

Constructors

IOMux::HTTP::Client->new(OPTIONS) See "Constructors" in IOMux::HTTP
IOMux::HTTP::Client->open(MODE, WHAT, OPTIONS) See "Constructors" in IOMux::Handler
IOMux::HTTP::Client->open(MODE, WHAT, OPTIONS) See "Constructors" in IOMux::Handler

Accessors

$obj->fh See "Accessors" in IOMux::Handler
$obj->fh See "Accessors" in IOMux::Handler
$obj->fileno See "Accessors" in IOMux::Handler
$obj->fileno See "Accessors" in IOMux::Handler
$obj->msgsSent
$obj->mux See "Accessors" in IOMux::Handler
$obj->mux See "Accessors" in IOMux::Handler
$obj->name See "Accessors" in IOMux::Handler
$obj->name See "Accessors" in IOMux::Handler
$obj->readSize([INTEGER]) See "Accessors" in IOMux::Handler::Read
$obj->socket See "Accessors" in IOMux::Net::TCP
$obj->startTime See "Accessors" in IOMux::HTTP
$obj->usesSSL See "Accessors" in IOMux::Handler
$obj->usesSSL See "Accessors" in IOMux::Handler
$obj->writeSize([INTEGER]) See "Accessors" in IOMux::Handler::Write

User interface

Connection

$obj->close([CALLBACK]) See "Connection" in IOMux::Handler
$obj->close([CALLBACK]) See "Connection" in IOMux::Handler
$obj->shutdown((0|1|2)) See "Connection" in IOMux::Net::TCP
$obj->timeout([TIMEOUT]) See "Connection" in IOMux::Handler
$obj->timeout([TIMEOUT]) See "Connection" in IOMux::Handler

Reading

$obj->readline(CALLBACK) See "Reading" in IOMux::Handler::Read
$obj->slurp(CALLBACK) See "Reading" in IOMux::Handler::Read

Writing

$obj->print(STRING|SCALAR|LIST|ARRAY) See "Writing" in IOMux::Handler::Write
$obj->printf(FORMAT, PARAMS) See "Writing" in IOMux::Handler::Write
$obj->say(STRING|SCALAR|LIST|ARRAY) See "Writing" in IOMux::Handler::Write
$obj->write(SCALAR, [MORE]) See "Writing" in IOMux::Handler::Write

Multiplexer

Connection

$obj->mux_init(MUX, [HANDLER]) See "Connection" in IOMux::Handler
$obj->mux_init(MUX, [HANDLER]) See "Connection" in IOMux::Handler
$obj->mux_remove See "Connection" in IOMux::Handler
$obj->mux_remove See "Connection" in IOMux::Handler
$obj->mux_timeout See "Connection" in IOMux::Handler
$obj->mux_timeout See "Connection" in IOMux::Handler

Reading

$obj->mux_eof See "Multiplexer" in IOMux::Net::TCP
$obj->mux_except_flagged(FILENO) See "Reading" in IOMux::Handler
$obj->mux_except_flagged(FILENO) See "Reading" in IOMux::Handler
$obj->mux_input(BUFFER) See "Reading" in IOMux::Handler::Read
$obj->mux_read_flagged(FILENO) See "Reading" in IOMux::Handler
$obj->mux_read_flagged(FILENO) See "Reading" in IOMux::Handler

Writing

$obj->mux_outbuffer_empty See "Writing" in IOMux::Handler::Write
$obj->mux_output_waiting See "Writing" in IOMux::Handler::Write
$obj->mux_write_flagged(FILENO) See "Writing" in IOMux::Handler
$obj->mux_write_flagged(FILENO) See "Writing" in IOMux::Handler

Service

Helpers

$obj->extractSocket(HASH)
IOMux::HTTP::Client->extractSocket(HASH) See "Helpers" in IOMux::Handler
$obj->extractSocket(HASH)
IOMux::HTTP::Client->extractSocket(HASH) See "Helpers" in IOMux::Handler
$obj->fdset(STATE, READ, WRITE, ERROR) See "Helpers" in IOMux::Handler
$obj->fdset(STATE, READ, WRITE, ERROR) See "Helpers" in IOMux::Handler
$obj->show See "Helpers" in IOMux::Handler
$obj->show See "Helpers" in IOMux::Handler

HTTP protocol

$obj->closeConnection See "HTTP protocol" in IOMux::HTTP
$obj->sendMessage(MESSAGE, CALLBACK) See "HTTP protocol" in IOMux::HTTP
$obj->sendRequest(REQUEST, CALLBACK, SESSION)

Send the request to the server. When the whole message has been sent, the CALLBACK will be called. You may send more REQUESTS in a row, which will be handled in-order by the server.

See a detailed example farther below in this man-page.

DETAILS

Coding examples

Often, HTTP interactions are rather stateless: simply requesting some files to be downloaded. However, more and more applications use HTTP as generic transport protocol with more complex message interchange. This module cleanly supports state transitions. See them as tasks to perform.

Any client implementation starts off like this

  my $server = "localhost:8081";

  # You may also choose IOMux::Select or other
  # multiplex instances (to be developed)
  use IOMux::Poll;
  my $mux    = IOMux::Poll->new;

  use IOMux::HTTP::Client;
  my $client = IOMux::HTTP::Client->new(PeerAddr => $server);
  $mux->add($client);

  # A session HASH (you may create a nice object around it)
  # will be passed from step to step.
  my $session = {};

  # Take the first step
  step1($client, $session);

  # You may initiate multiple clients and start many different steps
  # until you start the loop.
  $mux->loop;

  # The loop is left when all connections have closed
  exit 0;

  # Now here comes the implementation as shown in the examples below.

SEE ALSO

This module is part of IOMux-HTTP distribution version 0.11, built on January 27, 2011. Website: http://perl.overmeer.net/ All modules in this suite: "Any::Daemon", "IOMux", and "IOMux::HTTP".

Please post questions or ideas to perl@overmeer.net

LICENSE

Copyrights 2011 by Mark Overmeer. For other contributors see ChangeLog.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See http://www.perl.com/perl/misc/Artistic.html