[JDEV] Net::Jabber vs. Jabber::Connection?

Nicholas Perez nick at jabberstudio.org
Sun Jun 2 01:40:55 CDT 2002


I have actually used both libs to a very indepth degree. JabminRPC in 
its short lived life has been written in J::C and then rewritten in N::J.

J::C is really nice for things other than jabber since it depends 
strongly upon XML::Parser, and that allows you to basically parse things 
other than jabber packets (like the jabber.xml config file) in an xpath 
like way.

I also really like N::J for those really high level abstractions. I 
wrote a simple webpresence bot using N::J and the part that took the 
longest was talking via DBI and DBD::ODBC to MySQL. I had the jabber 
connection up and running in under 2 minutes.

But alas both have flaws too. After while you get tired of 
typing/cutting/pasting, all of those methods with J::C to accomplish the 
simple things that N::J does in one method. As for N::J Everything is an 
object and you only get objects back, and that can be cumbersome with 
things that are not fully implemented, such as XDB(understandable since 
its not written into a JEP or anything anywhere. No official means no 
support), that you could easily just get a jabber node and parse it out 
via J::C.

The only major problem right now with _both_ libs, is the complete lack 
of asynchronous parsing. This means the major bottleneck in your perl 
apps is the parser and you must wait in the queue to get parsed. Part of 
that issue falls upon perl's inability to be properly threaded. And this 
in turn leads people to write parsers that are explicitly blocking 
because of the serialization.

But overall, I love the work and love that goes into these libs. It 
enables anyone to jump into jabber programming and to add jabber 
abilities to just about anything that has a perl interface.

DJ Adams wrote:
> On Sat, Jun 01, 2002 at 04:10:51PM -0500, Ryan Eatmon wrote:
> 
>>You could try Process(0) to wait 0 seconds (ie. exit immediatly).  As 
>>for being odd that Process() blocks, this is the same behavior as many 
>>other Perl modules (IO:Select comes to mind first).  I would argue that 
>>Jabber::Connection is the odd man out.
> 
> 
> Why?
> 
> J::C's process() uses IO::Select (specifically the can_read() function).
> The behaviour is the same - it blocks for up to X seconds waiting for
> something to be available. Calling process() (i.e. with no explicit
> value) just makes the function assume 0 seconds.
>  
> 
>>As for the differences between the two.  DJ wrote Jabber::XXXXXX as an 
>>exercise and is slowly adding more to it.  Net::Jabber is meant to be a 
>>100% protocol compatible and high level implementation (in other words 
>>GetFrom() is high level as it hides the guts from you).
> 
>   
> It did start out as an excercise but turned out to be the module I was
> looking for too ;-) It's different to N::J in that it's a lowlevel
> lightweight approach. Rather than include high-level functions like
> GetFrom(), it allows you to build your own (the equivalent here is 
> attr('from')) using the NodeFactory module which was loosely aimed to
> reflect the API of the xmlnode library in the open source Jabber server.
> It gives you the flexibility to manipulate the nodes of the Jabber XML
> protocol as you see fit.
> 
> The examples you see on some of my web pages are with N::J as that was
> what I was using at the time. 
> 
> Although I've seen examples of people using both J::C and N::J together,
> it's usually the case that people will find one or the other that they
> feel comfortable with (bottom-up vs top-down approaches). 
> 
> Cheers
> dj
> _______________________________________________
> jdev mailing list
> jdev at jabber.org
> http://mailman.jabber.org/listinfo/jdev


-- 
Nick

JabminRPC Developer
JabberSMTP Developer
ChatBot's B1tch





More information about the JDev mailing list