2015-04-17 5 views
0

Мне нужно написать питон скрипт, который выполняет несколько задач:Каков наилучший способ реализации TCP-клиента python?

  1. читать команды из консоли и отправить на сервер через tcp/ip

  2. получить ответ сервера, процесс и сделать вывод на консоль.

Каков наилучший способ создания такого скрипта? Нужно ли мне создавать отдельный поток для прослушивания ответа сервера при взаимодействии с пользователем в основном потоке? Есть ли хорошие примеры?

+0

Зачем вам нужны два потока? Вы беспокоитесь о сообщениях с сервера при завершении предыдущей команды? Сервер заботится о том, что пользователь вводит, когда он находится в середине команды? Я не чувствую, что две задачи должны выполняться параллельно. – Eric

+0

Чем я могу получать сообщения от серверов и пользовательских команд с консоли одновременно? – Dmitry

+0

Вам нужно? Сервер когда-либо посылает то, что не отвечает команде? Не может ли он просто чередовать команду и ответ? т.е. 'while True: get_cmd(); send_to_server(); dispay_response() ' – Eric

ответ

0

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

Есть три основных способа построения тех эмулятор терминала, как приложений:

  • несколько процессов - то, как старый добрый Unix cu работал с fork
  • несколько потоков - вариант из выше с использованием светового потока нитей процессов
  • с использованием select системный вызов с мультиплексированным io.

Как правило, два первых метода считаются более простыми для кодирования одним потоком (или процессом) обработки восходящей связи, в то время как другой обрабатывает нисходящую. И третий, будучи хитрым, чтобы код, как правило, считается более эффективным

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

После всего моего мнения

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

Смежные вопросы