Как вы привязываете веб-сокеты к существующему процессу? - PullRequest
0 голосов
/ 13 октября 2019

Я пишу приложение, которое будет подключаться к серверу 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()
...