[jdev] xmpp4r component development
Adam Pisoni
apisoni at geni.com
Wed Jun 18 12:08:42 CDT 2008
I'm not sure I get what you're saying. First of all the components do
not need resources per se. I can run as many components AS the same
component jid (chat.whatever.com) as I want. ejabberd round robins
sending ALL stanzas which are addressed TO
ANYTHING at chat.whatever.com. It is up to the component to deal with
session management, presence, etc... In my case my component is only
fronting a single user with a massive roster and sending messages FROM
that user to users on other systems including AIM (via pyaimt). So I
don't currently have to deal with different rosters for different
users... though one of my design goals WAS handling just that.
Does that make sense?
Thanks,
adam
On Jun 18, 2008, at 5:07 AM, Jonathan Dickinson wrote:
> Hey Adam,
>
> A load-balancable bot? I assume that means that your chatbot can
> have x amounts of real contacts.
>
> The XMPP specs would indicate that you would need to give each a
> separate resource. One idea (not 100% XMPP compliant): since
> components can alter user's rosters how about providing the user
> with a new roster item every time they log in - this roster item
> would be one of the bots. E.g.
>
> Login 1:
>
> Juliet's Contact List
> ---------------------
> nurse at acmenurse.org/jill
>
> Login 2:
>
> Juliet's Contact List
> ---------------------
> nurse at acmenurse.org/jane
>
> The problem with that is Juliet may never communicate with the bot,
> as such it 'goes to waste' and one bot may be servicing requests
> alone (in the worst case). But it is a clean implementation.
>
> Another option would be to route all requests as follows:
>
> Client connections ---> server ---> nurse at acmenurse.org ---> jill,
> jane
>
> You would need to persist the contact's state between the bots, so
> you have a few options with that as well (===> indicates state info):
>
> Jill and Jane communicate with nurse at acmenurse.org to gather state.
> Client connections ---> server ---> nurse at acmenurse.org ---> jill,
> jane
> V================^=====^
> Or
>
> Jill and Jane communicate with database to gather state.
> Client connections ---> server ---> nurse at acmenurse.org ---> jill,
> jane
>
> ^=====^===== Database
>
> Finally, you can have the contact contain all the state for each
> contact. And send it along with each request. The flow would be:
>
> Cl == client (Juliet)
> Co == component (Nurse at acmenurse.org)
> B1 == bot1 (Nurse at acmenurse.org)
> B2 == bot2 (Nurse at acmenurse.org)
>
> Cl ---> Co: <message><body>Yes, send a nurse.</body></message>
> Co ---> B1: <message><body>Yes, send a nurse.</
> body><state><nurseRequested/></state></message>
> B1 ---> Co: <message><body>Nurse sent.</body><state><nurseSent/></
> state></message>
> Co ---> Cl: <message><body>Nurse sent.</body></message>
>
> Cl ---> Co: <message><body>Send a nurse</body></message>
> Co ---> B2: <message><body>Send a nurse.</body><state><nurseSent/></
> state></message>
> B2 ---> Co: <message><body>Nurse already sent.</
> body><state><nurseSent/></state></message>
> Co ---> Cl: <message><body>Nurse already sent.</body></message>
>
> B1 ---> Co: <message><body>Nurse at your door.</body><state/></
> message>
> Co ---> Cl: <message><body>Nurse at your door</body></message>
>
> Cl ---> Co: <message><body>Send a nurse.</body></message>
> Co ---> B1: <message><body>Send a nurse.</body><state/></message>
> B1 ---> Co: <message><body>Are you sure?</
> body><state><nurseRequested/></state></message>
> Co ---> Cl: <message><body>Are you sure?</body></message>
>
>
> I am sure you get the idea. Is this what you were after?
>
> Jonathan
>
>> -----Original Message-----
>> From: jdev-bounces at jabber.org [mailto:jdev-bounces at jabber.org] On
>> Behalf Of
>> Adam Pisoni
>> Sent: 17 June 2008 05:38 PM
>> To: Jabber/XMPP software development list
>> Subject: [jdev] xmpp4r component development
>>
>> Hola. I'm a newcomer at this list, but friends with Anders and
>> Blaine. I'll also be at the summit this year. I'm working on a,
>> still under wraps, project for Geni.com that involves heavy xmpp
>> development. Currently I'm working on a xmpp4r component to serve as
>> the gateway between our application and 'the world'. I would say my
>> component is acting like a glorified, load balance-able bot, but it's
>> a bit more than that. There's not a lot of information out there
>> on
>> components in general and even less on writing components with
>> xmpp4r. We've made tremendous progress, however , thanks to help
>> from
>> Anders and Blaine, as well as lots of trial and error. We're well
>> on
>> our way towards building a general xmpp4r component framework that is
>> analogous to xmpp4r-simple, but for component development.
>>
>> The good news is that we will be open sourcing this component
>> framework so that others can benefit. This will probably be the
>> first of a number of pieces in development that we will be open
>> sourcing. We realize that the xmpp community is still in its
>> infancy
>> and as such, everyone, including ourselves, benefits when we all
>> share. That said, I'm curious if anyone else out there has had much
>> experience building these types of components, especially with
>> xmpp4r,
>> and would like to exchange notes. I am also hoping to share some of
>> my design decisions to solicit some feedback.
>>
>> So, anyone want to exchange war stories?
>>
>> Thanks,
>> adam
>> _______________________________________________
>> JDev mailing list
>> FAQ: http://www.jabber.org/discussion-lists/jdev-faq
>> Forum: http://www.jabberforum.org/forumdisplay.php?f=20
>> Info: http://mail.jabber.org/mailman/listinfo/jdev
>> Unsubscribe: JDev-unsubscribe at jabber.org
>> _______________________________________________
> _______________________________________________
> JDev mailing list
> FAQ: http://www.jabber.org/discussion-lists/jdev-faq
> Forum: http://www.jabberforum.org/forumdisplay.php?f=20
> Info: http://mail.jabber.org/mailman/listinfo/jdev
> Unsubscribe: JDev-unsubscribe at jabber.org
> _______________________________________________
More information about the JDev
mailing list