import socketserver socketserver.BaseRequestHandler
Класс BaseRequestHandler()
модуля socketserver
представляет собой суперкласс всех объектов обработчика запросов.
Пользовательский конкретный подкласс обработчика запроса должен определить новый метод handle()
и может переопределить любой из других методов.
Для каждого клиентского запроса создается новый экземпляр подкласса.
BaseRequestHandler
.RequestHandler.setup()
:Метод RequestHandler.setup()
вызывается перед вызовом метода RequestHandler.handle()
для выполнения любых необходимых действий по инициализации.
Реализация по умолчанию ничего не делает.
RequestHandler.handle()
:Метод RequestHandler.handle()
должна выполнять всю работу, необходимую для обслуживания запроса. Реализация по умолчанию ничего не делает.
Методу доступны несколько атрибутов экземпляра:
self.request
; self.client_address
; self.server
.Тип self.request
отличается для datagram и stream служб. Для stream служб self.request
является объектом сокета, а для datagram служб self.request
- это пара строка и объект сокета.
RequestHandler.finish()
:Метод RequestHandler.finish()
вызывается после завершения работы метода RequestHandler.handle()
для выполнения любых необходимых действий по очистке задействованных ресурсов.
Реализация по умолчанию ничего не делает. Если метод RequestHandler.setup()
вызывает исключение, этот метод RequestHandler.finish()
не будет вызван.
Объект обработчика запроса создается один раз при каждом подключении к серверу и должен переопределить метод handle()
для реализации связи с клиентом.
class MyTCPHandler(socketserver.BaseRequestHandler): """ Класс обработчика запросов для сервера. Он создается один раз при каждом подключении к серверу и должен переопределить метод `handle()` для реализации связи с клиентом. """ def handle(self): # self.request - это TCP-сокет, подключенный к клиенту self.data = self.request.recv(1024).strip() print(f"{self.client_address[0]} отправил:") data = self.data.decode('utf-8') print(data) # отправим те же данные обратно, но в верхнем регистре self.request.sendall(data.upper().encode('utf-8'))