NAME
Gungho::Engine::POE - POE Engine For Gungho
SYNOPSIS
engine:
module: POE
config:
loop_delay: 0.5
client:
agent:
- AgentName1
- AgentName2
max_size: 16384
follow_redirect: 2
proxy: http://localhost:8080
keepalive:
keep_alive: 10
max_open: 200
max_per_host: 20
timeout: 10
DESCRIPTION
Gunghog::Engine::POE gives you the full power of POE to Gungho.
POE::Component::Client::HTTP AND DECODED CONTENTS
Since version 0.80, POE::Component::Client::HTTP silently decodes the content of an HTTP response. This means that, even when the HTTP header states
Content-Type: text/html; charset=euc-jp
Your content grabbed via $response->content() will be in decode Perl unicode. This is a side-effect from POE::Component::Client::HTTP trying to handle Content-Encoding for us, and HTTP::Request also trying to be clever.
We have devised workarounds for this. You can either set the following variables in your environment (before Gunghoe::Engine::POE is loaded) to enable the workarounds:
GUNGHO_ENGINE_POE_SKIP_DECODE_CONTENT = 1
# or
GUNGHO_ENGINE_POE_FORCE_ENCODE_CONTENT = 1
See ENVIRONMENT VARIABLES for details
USING KEEPALIVE
Gungho::Engine::POE uses PoCo::Client::Keepalive to control the connections. For the most part this has no visible effect on the user, but the "timeout" parameter dictate exactly how long the component waits for a new connection which means that, after finishing to fetch all the requests the engine waits for that amount of time before terminating. This is NORMAL.
ENVIRONMENT VARIABLES
GUNGHO_ENGINE_POE_SKIP_DECODE_CONTENT
When set to a non-null value, this will install a new subroutine in HTTP::Response's namespace, and will circumvent HTTP::Response to decode its content by explicitly passing charset = 'none' to HTTP::Response's decoded_content().
This workaround is ENABLED by default.
GUNGHO_ENGINE_POE_FORCE_ENCODE_CONTENT
When set to a non-null value, this will re-encode the content back to what the Content-Type header specified the charset to be.
By default this option is disabled.
METHODS
setup
sets up the engine.
run
Instantiates a PoCo::Client::HTTP session and a main session that handles the main control.
send_request($request)
Sends a request to the http client
CAVEATS
The POE engine supports multiple values in the user-agent header, but this is an exception. To be portable with other engines, and if you are using only one user-agent, set it at the top level:
user_agent: my_user_agent
engine:
module: POE
...
TODO
Xango, Gungho's predecessor, tried really hard to overcome one of my pet-peeves with PoCo::Client::HTTP -- which is that, while it can handle hundreds and thousands of requests, all the requests are unnecessarily stored on memory. Xango tried to solve this, but it ended up bloating the software. We may try to tackle this later.