Data Agent Tunnel client - proxy local web services to public network
Project description
Data Agent Tunnel Client
将本地 Web 服务透明代理到 Data Agent Tunnel,获得公网访问地址。
安装
pip install -e .
快速开始
方式一:Python 代码集成
import asyncio
from data_agent_tunnel_client import TunnelClient
async def main():
client = TunnelClient(
tunnel_url="wss://dataagent.eigenai.com/_tunnel/ws",
local_url="http://localhost:5000",
secret_key="your-secret-key", # 可选
)
# 连接成功后的回调
async def on_connect(c: TunnelClient):
print(f"已连接! 公网地址: {c.public_url}")
client.on_connect = on_connect
await client.connect()
asyncio.run(main())
方式二:命令行工具
tunnel-client \
-t wss://dataagent.eigenai.com/_tunnel/ws \
-l http://localhost:5000 \
-k your-secret-key
方式三:同步接口
from data_agent_tunnel_client import run_tunnel
run_tunnel(
tunnel_url="wss://dataagent.eigenai.com/_tunnel/ws",
local_url="http://localhost:5000"
)
与 Flask 集成
from flask import Flask
from data_agent_tunnel_client import TunnelClient
import asyncio
import threading
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello from Flask!"
@app.route("/api/data")
def data():
return {"message": "This is proxied through tunnel"}
def start_tunnel():
async def run():
client = TunnelClient(
tunnel_url="wss://dataagent.eigenai.com/_tunnel/ws",
local_url="http://localhost:5000"
)
async def on_connect(c):
print(f"Tunnel 已连接: {c.public_url}")
client.on_connect = on_connect
await client.connect()
asyncio.run(run())
if __name__ == "__main__":
# 在后台线程启动 tunnel
tunnel_thread = threading.Thread(target=start_tunnel, daemon=True)
tunnel_thread.start()
# 启动 Flask
app.run(port=5000)
与 FastAPI 集成
from fastapi import FastAPI
from contextlib import asynccontextmanager
from data_agent_tunnel_client import TunnelClient
import asyncio
tunnel_client: TunnelClient = None
@asynccontextmanager
async def lifespan(app: FastAPI):
global tunnel_client
tunnel_client = TunnelClient(
tunnel_url="wss://dataagent.eigenai.com/_tunnel/ws",
local_url="http://localhost:8000"
)
async def on_connect(c):
print(f"Tunnel 已连接: {c.public_url}")
tunnel_client.on_connect = on_connect
# 在后台启动 tunnel
task = asyncio.create_task(tunnel_client.connect())
yield
# 关闭 tunnel
await tunnel_client.disconnect()
app = FastAPI(lifespan=lifespan)
@app.get("/")
async def root():
return {"message": "Hello from FastAPI!"}
@app.get("/tunnel-url")
async def get_tunnel_url():
return {"public_url": tunnel_client.public_url}
API 参考
TunnelClient
TunnelClient(
tunnel_url: str, # Tunnel WebSocket 地址
local_url: str, # 本地服务地址
secret_key: str = "", # 认证密钥(可选)
session_id: str = "", # 指定会话 ID(可选)
reconnect: bool = True, # 断开后自动重连
reconnect_interval: float = 5.0, # 重连间隔(秒)
ping_interval: float = 30.0, # 心跳间隔(秒)
on_connect: Callable = None, # 连接成功回调
on_disconnect: Callable = None, # 断开连接回调
)
属性:
public_url: 公网访问地址connected_session_id: 当前会话 IDis_connected: 是否已连接
方法:
await connect(): 连接并开始代理await disconnect(): 断开连接
命令行参数
usage: tunnel-client [-h] -t TUNNEL_URL -l LOCAL_URL [-k SECRET_KEY]
[-s SESSION_ID] [--no-reconnect] [-v]
options:
-t, --tunnel-url Tunnel WebSocket 地址
-l, --local-url 本地服务地址
-k, --secret-key 认证密钥(可选)
-s, --session-id 指定会话 ID(可选)
--no-reconnect 断开后不自动重连
-v, --verbose 显示详细日志
License
MIT
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file data_agent_tunnel_client-0.1.0.tar.gz.
File metadata
- Download URL: data_agent_tunnel_client-0.1.0.tar.gz
- Upload date:
- Size: 13.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.16 {"installer":{"name":"uv","version":"0.9.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
11fcc8b24afd1b7447e5b33675c65d8fffd3ad2583f37a78b3a9a21ffad7cb05
|
|
| MD5 |
776034aee847b617963560e06aaea8ba
|
|
| BLAKE2b-256 |
43fa33dacc50aed3e79f49d3152c29e9044261d2e96ce0ef769bafbe22df52da
|
File details
Details for the file data_agent_tunnel_client-0.1.0-py3-none-any.whl.
File metadata
- Download URL: data_agent_tunnel_client-0.1.0-py3-none-any.whl
- Upload date:
- Size: 14.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.16 {"installer":{"name":"uv","version":"0.9.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
25ae60108a9feef6b33d3824904f16c864454651a257fe951f966802dce34dfc
|
|
| MD5 |
b05e879c7050b01c364a50054b41aac7
|
|
| BLAKE2b-256 |
0343f1e37eb3fcfd292cfc7996cfb1e1d0ded50298c0eb86b63f0e6b9957ed4d
|