Python - Как проверить, обслуживает ли TCP-сервер клиента - PullRequest
1 голос
/ 22 апреля 2020

Я использую инструментарий распознавания речи Kaldi "online 2-tcp-nnet3-decode-fast". Сервер получает необработанный звук и отправляет текст, соответствующий этому аудио, в прямом эфире. Другими словами, при использовании такого сервера идея состоит в том, чтобы начать транскрибировать звук сразу после его отправки.

Если сервер занят обслуживанием одного клиентского запроса, он не может обработать второй. Второй запрос будет оставаться бездействующим, пока не завершится первая транскрипция и первый клиент не закроет соединение.

Я хотел бы создать python клиент для связи с сервером TCP через веб-сокеты. Я могу создать соединение через сокет, однако я все еще не могу определить, обслуживает ли сервер уже другого клиента, чтобы я мог попробовать другие серверы на других портах или создать новый экземпляр сервера на лету.

Я использую что-то вроде сниппета ниже. Вызов для подключения успешен, даже когда сервер обслуживает другого клиента.

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))

1 Ответ

1 голос
/ 22 апреля 2020

Код сервера, включенный в Kaldi, является своего рода игрушкой, вы не можете использовать его в реальных приложениях только потому, что он не поддерживает многопроцессорность и не позволяет многопроцессорность с общей моделью. Это полная трата ресурсов.

Если вам нужен сервер веб-сокетов Kaldi, вы можете проверить VOSK сервер . Он может выполнять столько параллельных запросов, сколько вам нужно, и позволяет вам интеллектуально контролировать нагрузку. Также легко настроить vosk-сервер за прокси-сервером NGINX websocket и распределить нагрузку по множеству узлов.

...