Christian Cantrell wrote:

I'm using JSO to build a component, and I'm finding it more than a little confusing. I've posted to the JSO list, but it's pretty quiet, so I thought I'd try my luck here.

Using JSO, I'm able to connect to my server, listen for specific packets, and return packets successfully. The part I don't understand is how you continuously listen for packets. In all the example code I've found, the authors have set up an infinite loop inside of which they call Stream.process() to process new incoming packets, and also keep checking a Queue for new packets to send out. This technique works fine, but it seems odd to me, and is quite resource intensive on my development machine. Can someone explain:

1. Why is it done this way?
2. Is there another way to do it? It seems that I should simply be able to call a method that blocks until the packets I need come in rather than having to process packets in a tight infinite loop.

I'm also wondering if anyone can recommend any other Java XMPP libraries I can use to build an external XMPP component if I can't get JSO to work like I want it to.

Thanks,
Christian



Hi Christian,

One solution for this would be to invoke stream.process() when you are sure there is some data available. Like , if you are using some producer-consumer model , or if you are using java's nio package. With the former , it becomes as simple as just triggering a stream.process() as soon as you have produced some data. With the latter , you will need to use async io and register your channel with a selector for read events - which will get notified when there is data available to be read.

With your current approach , if your underlying socket is blocking socket , then you need to worry about cpu usage in an infinite loop - it will block until there is data available : with caveat that you will have one thread per component session. If you use nio , the only advantage is that you will be able to listen for read events from multiple streams simultaneously.

Not sure if I am answering your question properly enough ...

Regards,
Mridul

Reply via email to