Twisted
From JaWiki (Jabber/XMPP wiki)
Revision as of 10:20, 24 May 2007 by Feez (Talk | contribs) (→Для начинающего Twisted-разработчика)
Twisted | |
---|---|
Информация | |
Адрес: | http://twistedmatrix.com/trac/ |
Язык: | Python |
Реализация стандартов | |
Использование | |
Программы, использующие Twisted |
Twisted -- framework для написания сетевых приложений. Предоставляет механизмы для легкой реализации сетевого сервера и клиента. Есть классы облегчающие реализацию своего протокола, а также уже реализована обработка большого числа существующих протоколов, в том числе и XML-потока Jabber-а.
Contents
Для начинающего Twisted-разработчика
В отличии от многих других библиотек и фреймворков для реализации Jabber-приложений, в twisted-e обработка нескольких клиентских соединений производится не через потоки или процессы, а через конечный автомат (FSM). Это заставляет при написании приложения придерживаться нескольких правил:
- Функция не должна долго думать. Так как практически все соединения обрабатываются в одном потоке и в одном цикле, то каждая пауза сказывается на всех. Поэтому "долгие" задачи должны быть выделены в отдельный поток, который в конце работы передаст результат с помощью вызова функции в общем цикле (например с помощью twisted.internet.threads.deferToThread).
- Вся работа с внешними и потенциально-тормознутыми данными, это базы данных, сеть и даже работа с файлами, по тем же причинам должна быть разделена на две части (обычно через объект Deferred):
- Первая отправляет запрос
- Вторая (callback) обрабатывает результат когда он появится.
- Вся работа с сетью осуществляется в небезопасном, с точки зрения потоков, режиме. Поэтому для отправки в сеть каких-либо данных из потока необходимо воспользоваться специальными функциями, которые вставят отправку в общий цикл (reactor.callFromThread)
Для Jabber разработчика
Реализация Jabber протокола находится в пакете twisted.words.protocols.jabber.
ToDo: про создание и отправку станз
ToDo: про создание обработчиков
Пример клиентского приложения
ToDo: перевести http://yoan.dosimple.ch/blog/2007/01/30/