Я использую класс Python BaseHTTPRequestHandler для создания веб-сервера. Я хочу добавить конечную точку для WebSockets. Это означает, что мне нужно прочитать все, что доступно из rfile обработчика, чтобы я мог обрабатывать сообщения одно за другим по мере их получения (вместо того, чтобы читать входные данные while).
Я пытался использовать различные комбинации «чтения» (например, с большим буфером, думая, что он вернется раньше с меньшим количеством данных, если будет меньше данных; без параметров, но тогда это просто означает чтение до EOF) но не смог заставить это работать.
Я могу придумать два решения:
Для вызова read (1): читать байты один за другим. Я бы предпочел не делать этого, так как я не уверен, что такое семантика буферизации (например, я бы не хотел, чтобы syscall считывал за байт).
Чтобы временно сделать файл неблокирующим, затем попытайтесь выполнить чтение фрагмента данных, затем заблокируйте его, затем попытайтесь выполнить чтение на 1 байт. Это выглядит довольно грязно. Другой вариант, который я могу придумать, - это просто использовать неблокирующие сокеты, но это не очень хорошо работает с моей текущей многопоточной средой.
Любые идеи о том, как получить чтение, чтобы вернуть любые доступные данные?