forked from fritzy/SleekXMPP
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
73 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,75 @@ | ||
.. _echocomponent: | ||
|
||
================================= | ||
Create and Run a Server Component | ||
================================= | ||
|
||
.. note:: | ||
|
||
If you have any issues working through this quickstart guide | ||
or the other tutorials here, please either send a message to the | ||
`mailing list <http://groups.google.com/group/sleekxmpp-discussion>`_ | ||
or join the chat room at `sleek@conference.jabber.org | ||
<xmpp:sleek@conference.jabber.org?join>`_. | ||
|
||
If you have not yet installed SleekXMPP, do so now by either checking out a version | ||
from `Github <http://github.com/fritzy/SleekXMPP>`_, or installing it using ``pip`` | ||
or ``easy_install``. | ||
|
||
.. code-block:: sh | ||
pip install sleekxmpp # Or: easy_install sleekxmpp | ||
Many XMPP applications eventually graduate to requiring to run as a server | ||
component in order to meet scalability requirements. To demonstrate how to | ||
turn an XMPP client bot into a component, we'll turn the echobot example | ||
(:ref:`echobot`) into a component version. | ||
|
||
The first difference is that we will add an additional import statement: | ||
|
||
.. code-block:: python | ||
from sleekxmpp.componentxmpp import ComponentXMPP | ||
Likewise, we will change the bot's class definition to match: | ||
|
||
.. code-block:: python | ||
class EchoComponent(ComponentXMPP): | ||
def __init__(self, jid, secret, server, port): | ||
ComponentXMPP.__init__(self, jid, secret, server, port) | ||
A component instance requires two extra parameters compared to a client | ||
instance: ``server`` and ``port``. These specifiy the name and port of | ||
the XMPP server that will be accepting the component. For example, for | ||
a MUC component, the following could be used: | ||
|
||
.. code-block:: python | ||
muc = ComponentXMPP('muc.sleekxmpp.com', '******', 'sleekxmpp.com', 5555) | ||
.. note:: | ||
|
||
The ``server`` value is **NOT** derived from the provided JID for the | ||
component, unlike with client connections. | ||
|
||
One difference with the component version is that we do not have | ||
to handle the :term:`session_start` event if we don't wish to deal | ||
with presence. | ||
|
||
The other, main difference with components is that the | ||
``'from'`` value for every stanza must be explicitly set, since | ||
components may send stanzas from multiple JIDs. To do so, | ||
the :meth:`~sleekxmpp.basexmpp.BaseXMPP.send_message()` and | ||
:meth:`~sleekxmpp.basexmpp.BaseXMPP.send_presence()` accept the parameters | ||
``mfrom`` and ``pfrom``, respectively. For any method that uses | ||
:class:`~sleekxmpp.stanza.iq.Iq` stanzas, ``ifrom`` may be used. | ||
|
||
|
||
Final Product | ||
------------- | ||
|
||
.. include:: ../../examples/echo_component.py | ||
:literal: |