Sockets are one of the lowest-level concepts that you can use to write networking applications. It means managing the whole connection ourselves, usually when relying on sockets directly, you would have to handle connection requests, accept them, and then start a thread or a loop to handle the subsequent commands or data that is sent through the newly created connection channel.
This is a flow that nearly all applications that rely on networking have to implement, everything you call a server usually has as a foundation in the aforementioned loop.
The Python standard library provides a great foundation to avoid having to manually rewrite that flow every time you have to work on a networking-based application. We can use the socketserver module and let it handle the connection loop for us, while we focus on just implementing the application layer protocol and handling messages...