
{\color{red} \bf Warning:}
This document is written to explain the main functions of 
\pkg{pbdZMQ}~\citep{Chen2015}, version 0.1-0.  Every effort will be made to 
ensure future versions are consistent with these instructions, but features in 
later versions may not be explained in this document.

Information about the functionality of this package,
and any changes in future versions can be found on website:
``Programming with Big Data in R'' at
\url{https://pbdr.org/}~\citep{pbdR2012}.




\section[Introduction]{Introduction}
\label{sec:introduction}
\addcontentsline{toc}{section}{\thesection. Introduction}


ZeroMQ (0MQ)~\citep{hintjens2013zeromq}\footnote{Available at 
\url{https://www.zeromq.org/}} is a library for high-performance
asynchronous messaging in scalable distributed applications. It provides
APIs in several messaging patterns that, enabling developers a standardized 
way to form connections between different devices, including laptop computers, 
mobile devices, servers, clusters, and supercomputers. The APIs also simplify 
the complex calls to sockets and reduce the burden for developers of handling
low-level network communications.  Several popular programming languages 
provide bindings to these APIs.

In \pkg{pbdZMQ}, those ZeroMQ APIs are carefully wrapped in \proglang{R}
via lower level \proglang{C} code and offers a few ZeroMQ patterns, including
\begin{itemize}
\item request-reply, in particular, one client and a server, and
\item push-pull, in particular, one client and a set of servers.
\end{itemize}
These patterns are useful communication frameworks utilized in the
\pkg{pbdCS}~\citep{Schmidt2015} that combines two different messaging 
libraries, namely ZeroMQ and MPI, and utilizes their respective advantages in:
\begin{itemize}
\item user-to-server communication via \pkg{pbdZMQ}, and
\item server-to-server computations for statistical programming  
via \pkg{pbdMPI}~\citep{Chen2012}.
\end{itemize}
