\tikzstyle{iconlabel}=[text width=3cm, align=center, font=\footnotesize]
\tikzstyle{label}=[font=\footnotesize]
\begin{tikzpicture}[node distance=0pt,scale=1.5,>=stealth,thick]
- \def\nodelist{
- juliet/{(-1,-1)}/XMPP client \code{juliet@example.net}/below/computer,
- examplenet/{(-1,1)}/XMPP server \code{example.net}/above/server,
- imexampleorg/{(1,1)}/XMPP server \code{im.example.org}/above/server,
- romeo/{(1,-1)}/XMPP client \code{romeo@im.example.org}/below/computer%
- }
- \foreach \name/\pos/\text/\tpos/\icon in \nodelist {
- \node (\name) at \pos { \includegraphics[width=1cm]{icon-\icon.pdf} };
- \node[\tpos=of \name,iconlabel] (\name text) { \text };
- }
- \draw[<->,dashed] (juliet) -- node[anchor=east,label]{s2c} (examplenet);
- \draw[<->] (examplenet) -- node[anchor=south,label]{s2s} (imexampleorg);
- \draw[<->,dashed] (imexampleorg) -- node[anchor=west,label]{s2c} (romeo);
+ \input{fig-xmpparch.tex}
\end{tikzpicture}
\centering
\caption{XMPP architecture, showing server-to-server (s2s) and
closes its stream. If both streams are closed, the underlying TCP connection is
terminated.
-%\todo{see section... for example stream}
-
\subsubsection{Publish/Subscribe and Presence}
Typically, a user wants to chat with a more or less fixed set of other users,
the other user's status. The mechanism behind this is called
\term{Publish-Subscribe} and is specified in XEP-0060~\cite{xep0060}. It can
be used to notify interested users about changes in personal information, and
-implements the well-known Observer pattern.
+implements the well-known Observer pattern~\cite{GOF95}.
A user publishes information by creating a \term{node} on the XMPP server, which
acts as a handle for the data. Interested users can then query the server for
\begin{itemize}
\item an A record \code{capulet.local}, specifying her IP address,
\item an SRV record \code{juliet@capulet.\_presence.\_tcp.local}, specifying
- the port on which her XMPP client listens, and refering to
+ the port on which her XMPP client listens, and referring to
\code{capulet.local} as the host name
\item a PTR record \code{\_presence.\_tcp.local} for service discovery,
pointing to \code{juliet@capulet.\_presence.\_tcp.local}