async def METHOD_NAME(request, **kwargs):
    circular_queue = kwargs['circular_queue']
    ws = web.WebSocketResponse()
    await ws.prepare(request)
    request.app['websockets'].add(ws)
    try:
        async for msg in ws:
            if msg.type == aiohttp.WSMsgType.TEXT:
                if msg.data == 'close':
                    await ws.close()
                else:
                    data = json.loads(msg.data)
                    logging.info(f'\nuser event time {data["timestampInMs"]}')
                    if data['type'] == 'weel':
                        ts = time.time() * 1000
                        interval = ts - data['timestampInMs']
                        logging.info('WEEL request time approx ' + f'{interval:.2f} ms')
                        set_weel(data, circular_queue)
                    elif data['type'] == 'mouseMove':
                        set_mouse(data, circular_queue)
                    elif data['type'] == 'mouseLeftClick':
                        set_mouse_click(data, circular_queue)
                    # await ws.send_str(msg.data + '/answer')
            elif msg.type == aiohttp.WSMsgType.ERROR:
                print('ws connection closed with exception %s' % ws.exception())
    finally:
        request.app['websockets'].discard(ws)
    return ws