gen_server is an important feature of Erlang, and require some prerequisite to understand every aspect of this functionality:
A good way to learn more about a feature in Erlang is to directly read the source code from official github repository.
gen_server behavior embed lot of useful information and interesting structure in its core.
gen_server is defined in
gen_server.erl and its associated documentation can be find in
stdlib Erlang documentation.
gen_server is an OTP feature and more information can be also found in OTP Design Principles and User's Guide.
Frank Hebert give you also another good introduction to
gen_server from its free online book Learn You Some Erlang for great good!
Official documentation for