I choose to create two separate projects to allow for the greatest flexibility in implementing client or server software.<div><br></div><div>Net::AMQP is a OO representation of the protocol. �It uses the XML spec to dynamically create new classes in a Net::AMQP::Protocol:: namespace. �The chief purpose of this is to (de)serialize the wire-level encoding of AMQP frames and provide convenient OO representation of the frames.</div>
<div><br></div><div>POE::Component::Client::AMQP is an asynchronous client module which establishes the TCP connection to the server and uses Net::AMQP for it's (de)serialization of the frames. �It has to know some of the basics of the protocol, such as the connection grammar Start/StartOk, Tune/TuneOk, etc (though, now that I think of it, it's possible this could be moved to Net::AMQP as well). �It uses the data in Net::AMQP to automatically handle synchronous methods and their expected responses and content header building. �Ultimately POE::Component::Client::AMQP offers simply a channel for sending Net::AMQP packets and handling their responses, allowing you to write complex clients without worrying about the details of connecting and the protocol.</div>
<div><br></div><div>POE is a reactor pattern (<a href="http://en.wikipedia.org/wiki/Reactor_pattern" target="_blank">http://en.wikipedia.org/wiki/Reactor_pattern</a>) for Perl. �It is similar to Twisted for Python and EventMachine for Ruby. �Some people aren't fond of programming with the reactor pattern, as it's more difficult to track what's happening�at�any�given�moment,�and�one�can't�usually�write�linear�code.��For�this�reason,�it's�likely�that�another�Perl�client�will�be�instituted�(lenz is working on Net::AMQP::Simple) that will probably use IO::Socket directly.</div>
<div><br></div><div>Eric<br>
<br><div class="gmail_quote">On Wed, Jul 15, 2009 at 2:41 AM, Alexis Richardson <span dir="ltr"><<a href="mailto:alexis.richardson@gmail.com" target="_blank">alexis.richardson@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Eric<br>
<br>
Thanks for this. �I'm not familiar with Perl so please can you explain<br>
how the two projects relate to each other? �Should they always be used<br>
together?<br>
<font color="#888888"><br>
alexis<br>
</font><div><div></div><div><br>
<br>
On Sat, Jul 11, 2009 at 12:06 AM, Eric Waters<<a href="mailto:ewaters@gmail.com" target="_blank">ewaters@gmail.com</a>> wrote:<br>
> I'll avoid talking about something that's not specific to<br>
> RabbitMQ�in�this�forum in the<br>
> future,�but�wanted�to�mention�this�as�a�follow�up�to�a�post�earlier�this�week.<br>
> I�now�have�functioning�code�released�for�Net::AMQP�and�POE::Component::Client::AMQP.��Tested�it�against�RabbitMQ�1.6.0.��Get�it�from�<a href="http://github.com/ewaters" target="_blank">http://github.com/ewaters</a>.��You'll�need�to�clone�both�repositories<br>
> to run the example pingpong.pl program (idea copied from ruby-amqp).<br>
> To try it out, clone both projects into the same directory, cd into<br>
> poe-component-client-amqp, and run:<br>
> ��DEBUG=0 perl -Ilib -I../net-amqp/lib examples/pingpong.pl<br>
> ../net-amqp/spec/amqp0-8.xml<br>
> If you'd like to see the full protocol debug, change DEBUG=1.<br>
> The�perl�modules�are�fully�documented�in�POD. �If anyone is interested, I'd<br>
> love for collaboration on the project. �Drop me a line with your github<br>
> username and I'll add you as a github collaborator.<br>
> Sorry for the interruption. �Back to your regularly scheduled RabbitMQ<br>
> programming. �:)<br>
> Eric<br>
</div></div><div><div></div><div>> _______________________________________________<br>
> rabbitmq-discuss mailing list<br>
> <a href="mailto:rabbitmq-discuss@lists.rabbitmq.com" target="_blank">rabbitmq-discuss@lists.rabbitmq.com</a><br>
> <a href="http://lists.rabbitmq.com/cgi-bin/mailman/listinfo/rabbitmq-discuss" target="_blank">http://lists.rabbitmq.com/cgi-bin/mailman/listinfo/rabbitmq-discuss</a><br>
><br>
><br>
</div></div></blockquote></div><br></div>