Editing Twisted
From JaWiki (Jabber/XMPP wiki)
Warning: The database has been locked for maintenance, so you will not be able to save your edits right now. You may wish to copy and paste your text into a text file and save it for later.
The administrator who locked it offered this explanation: MediaWiki upgrading
The edit can be undone.
Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 1: | Line 1: | ||
{{Library | {{Library | ||
| name=Twisted | | name=Twisted | ||
− | + | | url=http://twistedmatrix.com/trac/ | |
− | | url= | + | | language=[[Python]] |
− | | language= | + | }}[[Category:Python]][[Category:Python_Library]] |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | }} | + | |
− | '''Twisted''' | + | '''Twisted''' -- framework для написания сетевых приложений. |
− | Предоставляет механизмы для легкой реализации сетевого сервера и клиента. | + | Предоставляет механизмы для легкой реализации сетевого сервера и клиента. |
− | Есть классы облегчающие реализацию своего протокола, а также уже реализована обработка большого числа существующих протоколов, в том числе и XML-потока [[Jabber]]-а. | + | Есть классы облегчающие реализацию своего протокола, а также уже реализована обработка большого числа существующих протоколов, в том числе и XML-потока [[Jabber]]-а. |
− | Но работа Twisted не ограничивается только сетью. | + | Но работа Twisted не ограничивается только сетью. |
Этот фреймворк облегчает создание расширяемых с помощью плагинов программ, конструирование многосервисных программ, создание единой авторизации пользователей между сервисами и многое другое. | Этот фреймворк облегчает создание расширяемых с помощью плагинов программ, конструирование многосервисных программ, создание единой авторизации пользователей между сервисами и многое другое. | ||
− | |||
== Для начинающего Twisted-разработчика == | == Для начинающего 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|про создание и отправку станз}} | |
− | + | ||
− | + | ||
− | == Для Jabber | + | |
− | Реализация Jabber протокола находится в пакете | + | |
− | {{Todo|про создание и отправку | + | |
{{Todo|про создание обработчиков}} | {{Todo|про создание обработчиков}} | ||
=== Пример клиентского приложения === | === Пример клиентского приложения === | ||
− | + | {{Todo|перевести http://yoan.dosimple.ch/blog/2007/01/30/}} | |
− | + | == Ссылки == | |
− | + | [[:Category:Twisted]] | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | == | + | == См. также == |
* [http://www.opennet.ru/base/dev/server_way.txt.html Подходы к организации серверного приложения] | * [http://www.opennet.ru/base/dev/server_way.txt.html Подходы к организации серверного приложения] | ||
* [http://twistedmatrix.com/documents/current/api/ Twisted API] | * [http://twistedmatrix.com/documents/current/api/ Twisted API] | ||
− | * [http://twistedmatrix.com/projects/core/documentation/howto/index.html | + | * [http://twistedmatrix.com/projects/core/documentation/howto/index.html Twisted документация] |
− | + | * [http://twistedmatrix.com/projects/core/documentation/howto/tutorial/index.html пример реализации протоколо Finger с помощью Twisted] | |
− | * [http://twistedmatrix.com/projects/core/documentation/howto/tutorial/index.html | + |