Я пишу приложение, которое будет подключаться к серверу XMPP как пользователь и отображать сообщения, которые пользователь получает через веб-сокет.
Я могу создать новое подключение каждый раз, когда получен запрос веб-сокета. Однако я просто хочу создать соединение с сервером xmpp только один раз и отправить все полученные сообщения обратно в соответствующий веб-сокет.
# websock.py
import asyncio
import websockets
from xmpp import connect_client
async def xmpp_connection(websocket, path):
await connect_client()
start_server = websockets.serve(xmpp_connection, "127.0.0.1", 5678)
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()
# xmpp.py
import asyncio
import aioxmpp
async def connect_client(local_jid=aioxmpp.JID.fromstr(username), password=password):
client = aioxmpp.PresenceManagedClient(
local_jid,
aioxmpp.make_security_layer(password, no_verify=True)
)
def message_received(msg):
print(msg)
message_dispatcher = client.summon(
aioxmpp.dispatcher.SimpleMessageDispatcher
)
message_dispatcher.register_callback(
aioxmpp.MessageType.CHAT,
None,
message_received,
)
async with client.connected() as stream:
print('connected')
while True:
await asyncio.sleep(1)
if __name__ == "__main__":
loop = asyncio.get_event_loop()
loop.run_until_complete(connect_client())
loop.close()