Сообщить об ошибке.

Класс BaseRequestHandler() модуля socketserver в Python

Суперкласс всех объектов обработчика запросов

Синтаксис:

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'))