Взаимодействие с twisted.internet.reactor - PullRequest
2 голосов
/ 17 января 2010

Я изучаю Twisted, особенно его сторону XMPP.Я пишу Jabber-клиент, который должен отправлять и получать сообщения.Вот мой код: http://pastebin.com/m71225776 Как я понял, рабочий процесс выглядит следующим образом: 1. Я создаю обработчики для важных сетевых событий (т.е. подключение, получение сообщений, отключение и т. Д.) 2. Я запускаю реактор.В этот момент запускается цикл, который ждет любого события.Когда событие происходит, оно передается указанному обработчику.Проблема в отправке сообщений.Отправка не связана с каким-либо сетевым событием, поэтому я не могу создать обработчик для него.Также я ничего не могу сделать с реактором, пока его петля не перестанет работать.Но цель - «Отправлять сообщения, когда мне нужно, и получать данные, когда они приходят».Я думаю, что я не совсем понимаю философию витого, поэтому, пожалуйста, дайте мне правильный путь.

Ответы [ 2 ]

2 голосов
/ 17 января 2010

Вам просто нужно выяснить, какие события будут вызывать отправку сообщения.

Например, в клиенте с графическим интерфейсом отправка происходит, когда пользователь что-то вводит. Вы должны интегрироваться с графическим инструментарием, используя для своей основной петли реактор Twisted (например, есть реактор Gtk + Twisted). После этого вы сможете прослушивать некоторые события интерфейса, например, ввод пользователя в текстовой области; и вы сможете отреагировать на это событие, отправив сообщение.

Другими источниками событий могут быть витые таймеры, любые протоколы, включая IPC, webhooks

Кстати, если вам нужна библиотека более высокого уровня для XMPP с Twisted, взгляните на Wokkel .

0 голосов
/ 19 января 2010

Точнее, вы ничего не можете сделать с реактором, пока он не вызовет один из ваших обратных вызовов. Вы не называете скрученными, вы называете скрученными.

Один из способов эксперимента состоит в том, чтобы один из ваших установочных обработчиков, который, как вы знаете, будет вызываться (или просто вставлять тестовый код после запуска реактора), вызывать callLater () или loopingCall ().

...