Difference between revisions of "Twisted"
m (→Для начинающего Twisted-разработчика) |
(еще немного описание) |
||
Line 8: | Line 8: | ||
Предоставляет механизмы для легкой реализации сетевого сервера и клиента. | Предоставляет механизмы для легкой реализации сетевого сервера и клиента. | ||
Есть классы облегчающие реализацию своего протокола, а также уже реализована обработка большого числа существующих протоколов, в том числе и XML-потока [[Jabber]]-а. | Есть классы облегчающие реализацию своего протокола, а также уже реализована обработка большого числа существующих протоколов, в том числе и XML-потока [[Jabber]]-а. | ||
+ | |||
+ | Но работа Twisted не ограничивается только сетью. | ||
+ | Этот фреймворк облегчает создание расширяемых с помощью плагинов программ, конструирование многосервисных программ, создание единой авторизации пользователей между сервисами и многое другое. | ||
+ | |||
== Для начинающего Twisted-разработчика == | == Для начинающего Twisted-разработчика == |
Revision as of 12:20, 24 May 2007
Twisted | |
---|---|
Информация | |
Адрес: | http://twistedmatrix.com/trac/ |
Язык: | Python |
Реализация стандартов | |
Использование | |
Программы, использующие Twisted |
Twisted -- framework для написания сетевых приложений. Предоставляет механизмы для легкой реализации сетевого сервера и клиента. Есть классы облегчающие реализацию своего протокола, а также уже реализована обработка большого числа существующих протоколов, в том числе и XML-потока Jabber-а.
Но работа Twisted не ограничивается только сетью. Этот фреймворк облегчает создание расширяемых с помощью плагинов программ, конструирование многосервисных программ, создание единой авторизации пользователей между сервисами и многое другое.
Contents
Для начинающего Twisted-разработчика
В отличии от многих других библиотек и фреймворков для реализации Jabber-приложений, в twisted-e обработка нескольких клиентских соединений производится не через потоки или процессы, а через конечный автомат (FSM). Это заставляет при написании приложения придерживаться нескольких правил:
- Функция не должна долго думать. Так как практически все соединения обрабатываются в одном потоке и в одном цикле, то каждая пауза сказывается на всех. Поэтому "долгие" задачи должны быть выделены в отдельный поток, который в конце работы передаст результат с помощью вызова функции в общем цикле (например с помощью twisted.internet.threads.deferToThread).
- Вся работа с внешними и потенциально-тормознутыми данными, это базы данных, сеть и даже работа с файлами, по тем же причинам должна быть разделена на две части (обычно через объект Deferred):
- Первая отправляет запрос
- Вторая (callback) обрабатывает результат когда он появится.
- Вся работа с сетью осуществляется в небезопасном, с точки зрения потоков, режиме. Поэтому для отправки в сеть каких-либо данных из потока необходимо воспользоваться специальными функциями, которые вставят отправку в общий цикл (reactor.callFromThread)
Для Jabber разработчика
Реализация Jabber протокола находится в пакете twisted.words.protocols.jabber.