6 Generic server processes
This chapter covers
- Building a generic server process
- Using GenServer
In chapter 5, you became familiar with basic concurrency techniques: you learned how to create processes and communicate with them. I also explained the idea behind stateful server processes — long-running processes that maintain state and can react to messages, do some processing, optionally send a response, and maybe change the internal process state.
Server processes play an important role and are used frequently when building highly concurrent systems in Elixir and Erlang, so we’ll spend some time exploring them in detail. In this chapter, you’ll learn how to reduce some of the boilerplate associated with server processes, such as infinite recursion, state management, and message passing.
Erlang provides a helper for implementing server processes — it’s part of the framework called Open Telecom Platform (OTP). Despite its misleading name, the framework has nothing to do with telecoms; rather, it provides patterns and abstractions for tasks such as creating components, building releases, developing server processes, handling and recovering from runtime errors, logging, event handling, and upgrading code.