Поведение блокировки наблюдается для Python3.6 socket.recv () при использовании с PJSUA2 - PullRequest
0 голосов
/ 06 марта 2019

Namaste Reader,

Мы работаем над механизмом связи клиент-сервер с использованием программирования сокетов. Состояния вызова PJSUA2 (ответ на вызов, удержание вызова, разъединение вызова и т. Д.) Обрабатываются на стороне клиента в зависимости от наших пользовательских команд, полученных от сервера.

Например, если сервер отправляет «cmd_answer», клиент будет выполнять операторы кода «call_prm.statusCode = 200» и «call.answer (call_prm)».

Я создал дополнительный поток для отдельного управления коммуникацией сокета. Внутри метода я регистрирую поток в PJSUA2 как «endpoint.libRegisterThread (« clientSocketCommunication »)».

Пример кода для связи через сокет приведен ниже:

def clientSocketCommunication:
    endpoint.libRegisterThread("clientSocketCommunication")
    ...
    ...

    while True:
        data = socket_client.recv(1024)

        # Parse data into object
        obj = json.loads(data.decode())
        print(obj)

        if obj['cmd'] == 'call_answer':
            call_prm.statusCode = 200
            call.answer(call_prm)
            print("Call answered")
        elif obj['cmd'] == 'call_end':
            call_prm.statusCode = 200
            call.hangup(call_prm)
            print("Call ended")
            break

Таким образом, в дополнение к основному приложению PJSUA2, этот вновь созданный поток для связи клиент-сервер теперь работает параллельно.

С этой логикой поток программы останавливается на неопределенное время в приведенной ниже инструкции даже после того, как сервер сокетов отправит сообщение клиенту сокета.

data = socket_client.recv(1024)

Конечная точка является объектом конечной точки PJSUA2, тогда как socket_client является объектом socket.socket () Python3.

Запрос помощи в решении этой проблемы. Обращайтесь за поддержкой, поскольку я новичок в Python и PJSUA2.

Спасибо | С уважением,

Dipen

...