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&#39;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&#39;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&#39;t fond of programming with the reactor pattern, as it&#39;s more difficult to track what&#39;s happening at any given moment, and one can&#39;t usually write linear code.  For this reason, it&#39;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">&lt;<a href="mailto:alexis.richardson@gmail.com" target="_blank">alexis.richardson@gmail.com</a>&gt;</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&#39;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&lt;<a href="mailto:ewaters@gmail.com" target="_blank">ewaters@gmail.com</a>&gt; wrote:<br>
&gt; I&#39;ll avoid talking about something that&#39;s not specific to<br>
&gt; RabbitMQ in this forum in the<br>
&gt; future, but wanted to mention this as a follow up to a post earlier this week.<br>
&gt; 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&#39;ll need to clone both repositories<br>


&gt; to run the example pingpong.pl program (idea copied from ruby-amqp).<br>
&gt; To try it out, clone both projects into the same directory, cd into<br>
&gt; poe-component-client-amqp, and run:<br>
&gt;   DEBUG=0 perl -Ilib -I../net-amqp/lib examples/pingpong.pl<br>
&gt; ../net-amqp/spec/amqp0-8.xml<br>
&gt; If you&#39;d like to see the full protocol debug, change DEBUG=1.<br>
&gt; The perl modules are fully documented in POD.  If anyone is interested, I&#39;d<br>
&gt; love for collaboration on the project.  Drop me a line with your github<br>
&gt; username and I&#39;ll add you as a github collaborator.<br>
&gt; Sorry for the interruption.  Back to your regularly scheduled RabbitMQ<br>
&gt; programming.  :)<br>
&gt; Eric<br>
</div></div><div><div></div><div>&gt; _______________________________________________<br>
&gt; rabbitmq-discuss mailing list<br>
&gt; <a href="mailto:rabbitmq-discuss@lists.rabbitmq.com" target="_blank">rabbitmq-discuss@lists.rabbitmq.com</a><br>
&gt; <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>
&gt;<br>
&gt;<br>
</div></div></blockquote></div><br></div>