# Subscriptions

Using the websockets transport, it is possible to execute GraphQL subscriptions, either using the sync or async usage.

The async usage is recommended for any non-trivial tasks (it allows efficient concurrent queries and subscriptions).

See Async permanent session and Async advanced usage for more advanced examples.

Note

The websockets transport can also execute queries or mutations, it is not restricted to subscriptions.

## Sync

    from gql import Client, gql
    from gql.transport.websockets import WebsocketsTransport

    # Select your transport with a defined url endpoint
    transport = WebsocketsTransport(url='wss://your_server/graphql')

    # Create a GraphQL client using the defined transport
    client = Client(transport=transport)

    # Provide a GraphQL subscription query
    query = gql('''
        subscription yourSubscription {
            ...
        }
    ''')

    # Connect and subscribe to the results using a simple 'for'
    for result in client.subscribe(query):
        print (result)

## Async

    import asyncio

    from gql import Client, gql
    from gql.transport.websockets import WebsocketsTransport

    async def main():

        # Select your transport with a defined url endpoint
        transport = WebsocketsTransport(url='wss://your_server/graphql')

        # Create a GraphQL client using the defined transport
        client = Client(transport=transport)

        # Provide a GraphQL subscription query
        query = gql('''
            subscription yourSubscription {
                ...
            }
        ''')

        # 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 as session:

            # Then get the results using 'async for'
            async for result in session.subscribe(query):
                print (result)

    asyncio.run(main())