Difference between revisions of "Twisted"
From JaWiki (Jabber/XMPP wiki)
m |
|||
Line 1: | Line 1: | ||
− | + | {{Library | |
+ | | name=Twisted | ||
+ | | url=http://twistedmatrix.com/trac/ | ||
+ | | language=[[Python]] | ||
+ | }}[[Category:Python]][[Category:Python_Library]] | ||
− | + | '''Twisted''' -- framework для написания сетевых приложений. | |
− | + | Предоставляет механизмы для легкой реализации сетевого сервера и клиента. | |
+ | Есть классы облегчающие реализацию своего протокола, а также уже реализована обработка большого числа существующих протоколов, в том числе и XML-потока [[Jabber]]-а. | ||
− | [[Category: | + | == Для начинающего Twisted-разработчика == |
+ | В отличии от многих других [[Library|библиотек]] и фреймворков для реализации Jabber-приложений, в twisted-e обработка нескольких клиентских соединений производится не через потоки или процессы, а через конечный автомат ([http://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BD%D0%B5%D1%87%D0%BD%D1%8B%D0%B9_%D0%B0%D0%B2%D1%82%D0%BE%D0%BC%D0%B0%D1%82 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/}} | ||
+ | |||
+ | == Ссылки == | ||
+ | [[:Category:Twisted]] | ||
+ | |||
+ | == См. также == | ||
+ | * [http://www.opennet.ru/base/dev/server_way.txt.html Подходы к организации серверного приложения] | ||
+ | * [http://twistedmatrix.com/documents/current/api/ Twisted API] | ||
+ | * [http://twistedmatrix.com/projects/core/documentation/howto/index.html Twisted документация] | ||
+ | * [http://twistedmatrix.com/projects/core/documentation/howto/tutorial/index.html пример реализации протоколо Finger с помощью Twisted] |
Revision as of 10:08, 24 May 2007
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/