Сообщения от клиентов приходят слишком быстро - PullRequest
0 голосов
/ 14 декабря 2018

Я пишу сервер Python TCP / IP, который принимает сообщения от одного клиента.Как только я получаю сообщение, я анализирую TCP-сообщение и генерирую ответ на основе его типа сообщения и отправляю сгенерированный ответ клиенту.

Мои приложения работают очень хорошо, пока вы не получите много сообщенийбыстро.Кажется, мой сервер блокирует ввод-вывод, пока он находится в процессе обработки сообщения.Например, пока я обрабатываю 3-е сообщение, 4-е сообщение никогда не будет принято моим сервером, поскольку я все еще обрабатываю 3-е сообщение.Поэтому 4-е сообщение теряется в пространстве.

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

Правильно ли приступить к решению этой проблемы?

РЕДАКТИРОВАТЬ: Еще через некоторое времятестируя, я понял, что всегда получаю сообщения Клиента;однако клиент истекает через 5-10 секунд, если он не получает ответного сообщения.Мне нужно ускорить обработку сообщений, потому что мой сервер думает, что все в порядке, потому что он на самом деле получает все сообщения и не теряет никаких сообщений, как я думал раньше.Проблема в том, что клиент нетерпелив.Любые советы о том, как ускорить производительность?Процесс на запрос, который выполняется параллельно, поэтому работа распределяется поровну?Единственная проблема, с которой я сталкиваюсь, это то, что сообщение появляется редко, когда я обрабатываю другое сообщение.

1 Ответ

0 голосов
/ 14 декабря 2018

Потоковое решение должно работать, но если вы используете версию 3.4 или новее, вы можете предпочесть использовать asyncio , который использует сопрограммы, а не потоки, и, на мой взгляд, его проще использовать.Однако это также будет зависеть от того, какую серверную библиотеку вы используете.

Asyncio хорошо работает с Sanic , но не с CherryPy.Все зависит от ваших инструментов.

...