Twisted - успешный (или неудачный) обратный вызов для LineReceiver sendLine
Я все еще пытаюсь освоить Twisted, находясь в процессе завершения приложения, которое его использует.
Мой вопрос:
Мое приложение использует LineReceiver.sendLine для отправки сообщений с сервера Twisted TCP. Я хотел бы знать, удалось ли sendLine.
Я понял, что мне нужно каким-то образом добавить успешный (и ошибку?) Обратный вызов в sendLine, но я не знаю, как это сделать.
Спасибо за любые указатели / примеры
1 ответ
Вы должны определить "успешно", чтобы придумать ответ на этот вопрос.
Все sendLine
немедленно (вероятно) добавляет несколько байтов в буфер отправки. В некотором смысле, до тех пор, пока это не вызовет исключения (например, MemoryError
потому что ваша линия слишком длинная или TypeError
потому что ваша линия была номером 3
вместо реальной строки) это удалось.
Это не очень полезный вид успеха. К сожалению, полезный вид успеха больше похож на то, что "байты были добавлены в буфер отправки, буфер отправки был сброшен в сокет, узел получил байты, и принимающее приложение постоянно действовало на данные".
Ничего в LineReceiver
могу сказать вам, что все эти вещи произошли. Стандартное решение заключается в добавлении некоторого подтверждения в ваш протокол: когда принимающее приложение воздействует на данные, оно отправляет обратно несколько байтов, которые сообщают исходному отправителю, что сообщение было обработано.
Вы не получите LineReceiver.sendLine
чтобы помочь вам много здесь, потому что все, что он действительно знает, как это сделать, это отправить несколько байтов в определенном формате. Вам нужен более сложный протокол для обработки подтверждений.
К счастью, Twisted поставляется с несколькими. twisted.protocols.amp
один: он предлагает удаленные вызовы методов (в комплекте с ответами) в качестве основной функции. Я считаю, что AMP подходит для широкого спектра применений, поэтому его часто можно рекомендовать для новых разработок. Это в значительной степени заменяет старшее twisted.spread
(также называемый "PB"), который также предоставляет как удаленные вызовы методов, так и ссылки на удаленные объекты (и поэтому является более сложным - по моему опыту, более сложным, чем требуется большинству приложений). Есть также некоторые опции, которые немного более стандартны: например, Twisted Web включает в себя реализацию HTTP (HTTP, как вы, возможно, знаете, хорош во взаимодействии стиля запрос / ответ).