The design of a custom server depends on its requirements for capacity, throughput, and resource usage. It might be a very simple single process with serialized access, or a server which handles multiple channel processes and voice channels simultaneously.
A custom server with only a single process serializes access to the resources it makes available amongst all channel processes accessing it concurrently. Under load, this can create a bottleneck, in which case you should use a multiprocess design.
A custom server may offer user functions which are self-sufficient, or it may require some information to persist across a series of calls to user functions. For example, a database query will often be self-sufficient, while functions which access voice channels directly will normally require a longer-term association between a custom server process and a voice channel. There are many possible designs, and many possible hybrids and variations on them. Examples given in this section are: