# AIOHTTPWebsocketsTransport

The AIOHTTPWebsocketsTransport is an alternative to the WebsocketsTransport, using the aiohttp dependency instead of the websockets dependency.

It also supports both:

> - the Apollo websockets transport protocol.

> - the GraphQL-ws websockets transport protocol

It will propose both subprotocols to the backend and detect the supported protocol from the response http headers returned by the backend.

Note

For some backends (graphql-ws before version 5.6.1 without backwards compatibility), it may be necessary to specify only one subprotocol to the backend. It can be done by using `subprotocols=[AIOHTTPWebsocketsTransport.GRAPHQLWS_SUBPROTOCOL]` or `subprotocols=[AIOHTTPWebsocketsTransport.APOLLO_SUBPROTOCOL]` in the transport arguments.

This transport allows to do multiple queries, mutations and subscriptions on the same websocket connection.

Reference: `gql.transport.aiohttp_websockets.AIOHTTPWebsocketsTransport`

    import asyncio
    import logging

    from gql import Client, gql
    from gql.transport.aiohttp_websockets import AIOHTTPWebsocketsTransport

    logging.basicConfig(level=logging.INFO)

    async def main():

        transport = AIOHTTPWebsocketsTransport(
            url="wss://countries.trevorblades.com/graphql"
        )

        # Using `async with` on the client will start a connection on the transport
        # and provide a `session` variable to execute queries on this connection
        async with Client(
            transport=transport,
        ) as session:

            # Execute single query
            query = gql(
                """
                query getContinents {
                  continents {
                    code
                    name
                  }
                }
            """
            )
            result = await session.execute(query)
            print(result)

            # Request subscription
            subscription = gql(
                """
                subscription {
                    somethingChanged {
                        id
                    }
                }
            """
            )
            async for result in session.subscribe(subscription):
                print(result)

    asyncio.run(main())