DOoM 2 is implemented as a set of processes distributed across at least three hosts, communicating using DOoM Message Protocol (DMP).
Each host machine must run at least one DMR. The DMR is responsible for routing DOoM messages between local DOoM processes/threads and remote DMRs. A DMR must be robust enough that if it is killed and restarted no messages are lost.
Communication with remote DMRs is over TCP sockets. Some remote DMRs may need to be launched via HTTP and CGI. Communication with local processes and threads uses appropriate local IPC methods. (Unix-domain sockets, or if need be plain files.)
Major DOoM objects (including player front-end, game front-end, player back-end, ratings daemon) should run as separate processes or threads to distribute compute load as much as possible and reduce blocking under congestion.
DOPs may be written in Java (typically front-end threads that run within a web browser), Perl (for server-side processes) or any other convenient language. They rely on their local DMR for communication with the rest of the DOoM. They may also use other network services, e.g. a game front-end may load a graphic from an HTTP server in response to receiving a DM.