Hello,
This is a problem that we've thought of and solved. See the
"Concurrency" option to PoCo::Server::TCP
http://search.cpan.org/~rcaputo/POE-1.289/lib/POE/Component/Server/TCP.pm#Concurrency
You must have missed that part or the docs wasn't clear. If you have
suggestions on how to make it more clearer - please let us know!
Happy hacking! :)
~Apocalypse
Mike Schilli wrote:
Hi POE folks,
while writing a port forwarder similar to the one in the POE cookbook,
just by using POE::Component::Server::TCP and ::Client::TCP instead, I
hit
a roadblock when it came to synchronizing the components.
After POE::Component::Server::TCP has started up (binding to the 'From'
port), if a client connects to it, the server will call the
client_connect callback, which I'm using to spawn an instance of
POE::Component::Client::TCP to connect to the 'To' port.
At this time, I need the server to wait accepting requests from the
connecting client *until* POE::Component::Client::TCP has connected to
the
'To' port.
However, there's no way to say in the client_connect callback that the
server should not proceed to the 'client_request' stage yet.
I found a workaround by setting a global variable $CONNECTED in
my $client_session =
POE::Component::Client::TCP->new(
# ...
Connected => sub { $CONNECTED = 1; },
# ...
and adding
$kernel->run_one_timeslice() while !$CONNECTED;
to the client_request callback of the POE::Component::Server::TCP
server. This does the trick, but I don't like that it's a
global variable that allows only single use of this component.
Is there a better way?
-- Mike
Mike Schilli
m...@perlmeister.com