LINUX.ORG.RU

Вопросы по отправке сообщений xmpp

 , , ,


0

1

Есть код, использующий xmpppy. Код просто отправляет сообщение в jabber конференцию:

#!/usr/bin/python

import xmpp, os, sys

jid = xmpp.protocol.JID(os.environ["USERNAME"])
cl=xmpp.Client(jid.getDomain())
cl.connect(server=('example.com',5222))
cl.auth(jid.getNode(), os.environ["PASSWORD"])
cl.sendInitPresence(requestRoster=0)
cl.send(xmpp.Presence(to='{0}/{1}'.format(sys.argv[1], jid)))
message=xmpp.Message(sys.argv[1], sys.argv[2])
message.setAttr('type', 'groupchat')
cl.send(message)

Код запускается командой:

./test.py room-name@conference.example.com 'My test message'

Данный код работает, но есть 2 вопроса:

1) сообщения пишутся от полного USERNAME, а именно от test@example.com, а нужно использовать только ник, т.е. писать просто 'test'. В документации не нашел, как это сделать. Вписывал так cl.auth(jid.getNode(), os.environ["XMPP_PASSWORD"], 'test'), но это не работает.

2) Пароль хотелось бы передавать в виде MD5-хеша строки, а не в чистом виде. Подскажите код, как это сделать.

Deleted

Последнее исправление: Deleted (всего исправлений: 1)
cl.send(xmpp.Presence(to='{0}/{1}'.format(sys.argv[1], jid)))
cl.send(xmpp.Presence(to='{0}/{1}'.format(sys.argv[1], "test")))
cl.send(xmpp.Presence(to='{0}/{1}'.format(sys.argv[1], jid.split('@', 1)[0])))  # хотя вместо split() наверное в либе должна быть более кошерная функция, но и так сработать должно
Psych218 ★★★★★
()
Ответ на: комментарий от Deleted

какие альтернативы

slixmpp, sleekxmpp, Twisted, nbxmpp.

и почему?

xmpppy умерло очень давно, никогда не имело хороший API (в nbxmpp он ещё хуже стал) и только для Python 2.

Darth_Revan ★★★★★
()
Ответ на: комментарий от Darth_Revan

Неплохо! А есть между этими вариантами разница в производительности отправки сообщений? Есть какой-то вариант, который окажется быстрее других?

Deleted
()
Ответ на: комментарий от Deleted

Сами по себе – вряд ли.
Единственное, sleekxmpp основан на потоках, что может тяжело (относительно) сказаться на малоядерном процессоре, если отправлять много и сразу с threaded=True. Поэтому и сделали slixmpp на asyncio.
Но asyncio не является сверхбыстрым, поэтому существует, например, uvloop для ценителей.
Но будь я проклят, если ты сможешь что-либо из этого заметить при отправке сообщений по XMPP %).
С nbxmpp, на самом деле, намучаешься, а с Twisted надо много велосипедить (хотя, есть какой-то Wokkel).

Darth_Revan ★★★★★
()
Последнее исправление: Darth_Revan (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.