Difference between revisions of "Twisted"

From JaWiki (Jabber/XMPP wiki)
Jump to: navigation, search
m
 
Line 1: Line 1:
Часть framework, которая предназначена для работы с [[IM]], в том числе с Jabber носит название Twisted-Words.
+
{{Library
 +
|            name=Twisted
 +
|              url=http://twistedmatrix.com/trac/
 +
|        language=[[Python]]
 +
}}[[Category:Python]][[Category:Python_Library]]
  
* Сайт: http://twistedmatrix.com/trac/
+
'''Twisted''' -- framework для написания сетевых приложений.  
* Язык: [[Python]]
+
Предоставляет механизмы для легкой реализации сетевого сервера и клиента.
 +
Есть классы облегчающие реализацию своего протокола, а также уже реализована обработка большого числа существующих протоколов, в том числе и XML-потока [[Jabber]]-а.
  
[[Category:Library]]
+
== Для начинающего 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-а.

Для начинающего Twisted-разработчика

В отличии от многих других библиотек и фреймворков для реализации Jabber-приложений, в twisted-e обработка нескольких клиентских соединений производится не через потоки или процессы, а через конечный автомат (FSM). Это заставляет при написании приложения придерживаться нескольких правил:

  1. Функция не должна долго думать. Так как практически все соединения обрабатываются в одном потоке и в одном цикле, то каждая пауза сказывается на всех. Поэтому "долгие" задачи должны быть выделены в отдельный поток, который в конце работы передаст результат функции в общем цикле (например с помощью twisted.internet.threads.deferToThread).
  2. Вся работа с внешними и потенциально-тормознутыми данными, это базы данных, сеть и даже работа с файлами, по тем же причинам должна быть разделена на две части (обычно через объект Deferred):
    1. Первая отправляет запрос
    2. Вторая (callback) обрабатывает результат когда он появится.
  3. Вся работа с сетью осуществляется в небезопасном, с точки зрения потоков, режиме. Поэтому для отправки в сеть каких-либо данных из потока необходимо воспользоваться специальными функциями, которые вставят отправку в общий цикл (reactor.callFromThread)

Для Jabber разработчика

Реализация Jabber протокола находится в пакете twisted.words.protocols.jabber.

ToDo: про создание и отправку станз
ToDo: про создание обработчиков

Пример клиентского приложения

Ссылки

Category:Twisted

См. также