Реализация витой матрицы и сервера telnet - PullRequest
3 голосов
/ 19 мая 2010

У меня есть проект, который по сути является игровым сервером, где пользователи подключаются и отправляют текстовые команды через telnet.

Код написан на C, он действительно старый и немодульный, содержит несколько ошибок и отсутствующих функций. Одна только основная функция - половина кода.

Я пришел к выводу, что переписывание его на Python с использованием Twisted может привести к более быстрому завершению, помимо других преимуществ.

Итак, вот вопросы: Какие пакеты и модули мне следует использовать? Я вижу модуль "telnet" внутри пакета "протоколы". Я также вижу пакет "cronch" с "ssh" и другим модулем "telnet".

Я новичок в Python.

Ответы [ 2 ]

5 голосов
/ 20 мая 2010

Предложение Грега попытаться познакомиться с Python, прежде чем пытаться взять Twisted, возможно, является разумным. Ограничение возможных источников вашей путаницы может помочь вам избежать некоторых очень неприятных случаев.

С другой стороны, я знаю многих людей, которые берут проект на основе Twisted в качестве первого опыта изучения Python и добиваются успеха. Так что это возможно. И вам придется сначала сделать что-то . Нет гарантии, что то, что вы выберете вместо Twisted, будет проще. :)

Что касается специфики telnet, вы хотите использовать twisted.conch.telnet, а не twisted.protocols.telnet. Первый из них более новый, лучше протестированный, более функциональный и имеет несколько примеров (хотя, к сожалению, не так уж много документации).

В основном примере telnet показаны наиболее полезные обработчики событий, которые вы можете определить, если используете twisted.conch.telnet. К сожалению, на самом деле это не объясняет, что они делают, и не дает демонстрации того, как вы могли бы вести переговоры. Если вы уже знакомы с самим протоколом telnet (в первую очередь его согласованием опций), это должно иметь смысл для вас. Если вы думаете о «telnet» как о способе передачи читаемых / записываемых байтов человеком между двумя компьютерами, то вы, вероятно, раньше не сталкивались с согласованием опций, и это может не иметь особого смысла. Вы можете либо проигнорировать его, либо проверить telnet RFC , чтобы узнать больше (хотя и немного плотно).

Для самостоятельного согласования опций вы можете, по крайней мере, взглянуть на документацию API для объекта self.transport, который вы видите в приведенном выше связанном примере (это не обычный транспорт TCP, поскольку вы В большинстве случаев Twisted будет использоваться, но это особый транспорт, полученный из telnet, который расположен поверх TCP, поэтому у него есть несколько дополнительных функций.

Если вы просто хотите передать байты, тогда вы можете сосредоточиться на методе dataReceived и self.transport.write. Первый будет вызван, когда вы получите байты от вашего пира; последний вы можете позвонить, чтобы отправить байты вашему пиру.

1 голос
/ 19 мая 2010

Похоже, у вас есть две отдельные задачи здесь:

  • Перенос кода с C на Python.
  • Переписать всю программу для использования Twisted.

Поскольку вы новичок в Python, я склонен сделать первый первый , прежде чем пытаться заставить структуру программы работать в Twisted. Если программа старая, вряд ли возникнут какие-либо проблемы с ее работой на современном оборудовании.

Преобразование кода C в Python первым даст вам знакомство с Python, которое необходимо запустить на порте для Twisted.

...