Я ищу некоторую общую информацию о том, как мне следует подходить к проблеме, для которой, мне кажется, Twisted отлично подходит. (Я новичок в Twisted, но не в Python)
У меня есть контроллер домашней автоматизации, который может поддерживать одно соединение через сокет TCP, отправляя и получая двоичные данные. Я хотел бы использовать XMPP в качестве моста к сокету, чтобы пользователь мог отправлять команды и получать события.
Я получил элементарное сокетное соединение, работающее с Twisted, которое могло отправлять и получать команды из одного из примеров в книге О'Рейли. У меня также есть полностью рабочий бот Python XMPP, написанный с библиотекой SleekXMPP, который меня устраивает. Я просто не знаю, как их соединить.
Основной сценарий:
- Пользователь отправляет сообщение боту XMPP, в котором выясняется, какую команду отправить в сокет
- Команда ASCII Socket преобразуется в двоичный файл и отправляется в сокет
- Сокет получает команду и отправляет двоичный ответ
- Двоичный ответ, преобразованный в ASCII
- Бот XMPP отправляет ответ пользователю.
- Сетевые события (независимо от действий пользователя) также могут быть получены сетевым сокетом и должны быть отправлены пользователю
Это # 6, который представляет проблему, в противном случае я бы просто открывал / закрывал сокет по требованию, когда нужно что-то написать.
Часть, с которой у меня возникают проблемы, когда я закручиваю свою голову с помощью Twisted, - лучший способ заставить эти два цикла событий взаимодействовать. Я видел много информации об использовании очередей, отложенных, потоков, выбора и т. Д. У меня такое ощущение, что Twisted может справиться со многими сложностями, если я только научусь правильно использовать инструмент.
Если кто-то может указать мне правильное направление, я возьму мяч и побегу с ним. Как я уже упоминал, я доволен своим ботом XMPP и хотел бы использовать существующий код. Я думаю, что моя проблема сейчас сводится к созданию сокета в фоновом режиме, а затем к отправке и получению данных из этого сокета на переднем плане.
Кстати, я очень рад поделиться своим кодом, как только он заработает, чтобы кто-то другой мог получить помощь, о которой я прошу.
- Скотт