services.client
源文件
services/client.py· 由scripts/gen_api_docs.py自动生成,请勿手改
模块说明:
共享 HTTP 客户端 — 所有 worker 统一使用
类
class RateLimiter
异步令牌桶限流器 — ESI 要求 ≤20 req/s,超发时自动排队等待。
用法:请求前 await limiter.acquire()。rate 为每秒令牌数, burst 为瞬时突发上限(桶容量)。
用 threading.Lock 保护令牌更新:不绑定事件循环(模块级单例可被 多个 asyncio.run 复用,重试不会抛 "bound to a different event loop"), 同时线程安全。
定义行:14
方法
__init__
def __init__(self, rate: float=20.0, burst: int=40)⚠️ 待补 docstring
此函数暂无 docstring,欢迎补充。
定义行:25
acquire
async def acquire(self) -> None获取一个令牌(不足时按速率等待)
定义行:32
rate
def rate(self) -> float⚠️ 待补 docstring
此函数暂无 docstring,欢迎补充。
定义行:46
class APIClient
异步 HTTP 客户端(含重试、并发控制、全局限流)
定义行:55
方法
__init__
def __init__(self, concurrency: int=20, timeout: int=30, user_agent: str='EveApp/1.0', retries: int=3, limiter: RateLimiter | None=None)⚠️ 待补 docstring
此函数暂无 docstring,欢迎补充。
定义行:58
limiter
def limiter(self) -> RateLimiter共享限流器 — worker 直接用它保护裸请求
定义行:76
__aenter__
async def __aenter__(self)⚠️ 待补 docstring
此函数暂无 docstring,欢迎补充。
定义行:80
__aexit__
async def __aexit__(self, *exc)⚠️ 待补 docstring
此函数暂无 docstring,欢迎补充。
定义行:90
_handle_rate_limit
async def _handle_rate_limit(resp: aiohttp.ClientResponse)处理 ESI 429 限流:读取 Retry-After 响应头并等待(最多 120 秒)
定义行:95
fetch
async def fetch(self, url: str) -> dict | NoneGET 请求,返回解析后的 JSON,404/超时返回 None
定义行:101
fetch_raw
async def fetch_raw(self, url: str) -> list | NoneGET 请求,返回原始 JSON(列表响应,如订单簿页),404/超时返回 None
定义行:131
get_headers
async def get_headers(self, url: str) -> dict[str, str] | NoneGET 请求,返回响应头(X-Pages 等);非 200 返回 None
定义行:157
fetch_required
async def fetch_required(self, url: str)GET 请求,失败时抛出异常
定义行:178
post
async def post(self, url: str, json: dict | list | None=None)POST JSON 请求,返回解析后的 JSON;404/超时返回 None。
定义行:199
get_text
async def get_text(self, url: str) -> str | NoneGET 请求,返回原始文本
定义行:221