Previous | Table of Contents | Next |
2.3.1.2. The ACE Framework Components
Around 40% of ACE consists of communication software framework components that integrate and enhance the C++ wrappers. These framework components support the flexible configuration of concurrent communication applications and services. The framework layer in ACE contains the following components:
When combined with the use of C++ language features (such as templates, inheritance, and dynamic binding) and design patterns (such as Abstract Factory, Builder, and Service Configurator), the ACE framework components facilitate the development of communication software that can be updated and extended without modifying, recompiling, relinking, or even restarting running systems (Schmidt & Suda, 1994).
2.3.1.3. Self-Contained Distributed Service Components
ACE provides a standard library of distributed services that are packaged as self-contained components. Although these service components are not strictly part of the ACE framework, they play two important roles:
2.3.1.4. Middleware Applications
ACE has been used in research and development projects at many universities and companies. For instance, it has been used to build avionics systems at McDonnell Douglas (Schmidt et al., 1997); telecommunication systems at Bellcore (Schmidt, 1995), Ericsson (Schmidt & Stephenson, 1995), and Motorola (Schmidt, 1996a); and medical imaging systems at Siemens (Jain & Schmidt, June 1997) and Kodak (Pyarali et al., 1996). In addition, ACE has been the subject of many academic research projects. Two examples of middleware applications provided with the ACE release are
The benefits of applying frameworks and patterns to communication software are best introduced by example. This section describes the structure and functionality of high-performance Web servers developed using the patterns and framework components in ACE. Many error-handling details are omitted to keep the code examples concise. In addition, the examples focus on features that are portable across multiple OS platforms, although noteworthy platform-specific features of ACE (such as asynchronous I/O and I/O completion ports) are described where appropriate.
Figure 2.3 illustrates the general architecture of a Web system. The diagram provides a layered view of the architectural components required for an HTTP client to retrieve an HTML file from an HTTP server (Fielding, Gettys, Mogul, Frystyk, & Berners-Lee, 1997). Through GUI interactions, the client application user instructs the HTTP client to retrieve a file. The requester is the active component of the client that communicates over the network. It issues a request for the file to the server with the appropriate syntax of the transfer protocolin this case, HTTP. Incoming requests to the HTTP server are received by the dispatcher, which is the request demultiplexing engine of the server. It is responsible for creating new threads or processes (for concurrent Web servers) or managing sets of socket handles (for single-threaded concurrent servers). Each request is processed by a handler, which goes through a life cycle of parsing the request, logging the request, fetching file status information, updating the cache, sending the file, and cleaning up after the request is done. When the response returns to the client with the requested file, it is parsed by an HTML parser so that the file can be rendered. At this stage, the requester can issue other requests on behalf of the client (e.g., in order to maintain a client-side cache).
FIGURE 2.3. The general architecture of a Web system.
Previous | Table of Contents | Next |