WebSocket Tunnel - 透明反向代理隧道,支持服务端嵌入和客户端 SDK
Project description
tunely - WebSocket 隧道
WebSocket 透明反向代理隧道 - Python 服务端和客户端 SDK。
特性
- 透明代理: HTTP 请求通过 WebSocket 隧道转发
- SSE 支持: 完整支持 Server-Sent Events 流式响应 (v0.2.0+)
- 连接保护: 防止意外抢占已有连接
- 自动重连: 客户端断线自动重连
安装
pip install tunely
使用
服务端(嵌入 FastAPI)
from fastapi import FastAPI
from tunely import TunnelServer
app = FastAPI()
tunnel_server = TunnelServer()
app.include_router(tunnel_server.router)
@app.on_event("startup")
async def startup():
await tunnel_server.initialize()
# 普通请求转发
response = await tunnel_server.forward(
domain="my-agent",
method="POST",
path="/api/chat",
body={"message": "hello"}
)
# SSE 流式转发 (v0.2.0+)
async for msg in tunnel_server.forward_stream(
domain="my-agent",
method="POST",
path="/api/stream",
body={"message": "hello"}
):
if isinstance(msg, StreamStartMessage):
print(f"Stream started: status={msg.status}")
elif isinstance(msg, StreamChunkMessage):
print(f"Chunk: {msg.data}")
elif isinstance(msg, StreamEndMessage):
print(f"Stream ended: {msg.total_chunks} chunks")
客户端
from tunely import TunnelClient
client = TunnelClient(
server_url="ws://server/ws/tunnel",
token="tun_xxx",
target_url="http://localhost:8080"
)
await client.run()
命令行
# 连接到隧道服务器
tunely connect --server ws://server/ws/tunnel --token tun_xxx --target http://localhost:8080
# 强制抢占已有连接
tunely connect --server ws://server/ws/tunnel --token tun_xxx --target http://localhost:8080 --force
SSE 支持说明
从 v0.2.0 开始,tunely 自动检测 SSE 响应(Content-Type: text/event-stream)并进行流式传输:
- 客户端: 自动检测 SSE 响应,发送 StreamStart → StreamChunk* → StreamEnd 消息
- 服务端: 使用
forward_stream()方法获取 AsyncIterator 处理流式数据
协议版本
- v1.0: 基础请求-响应
- v1.1: 添加 SSE 流式响应支持
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
tunely-0.3.1.tar.gz
(118.8 kB
view details)
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
tunely-0.3.1-py3-none-any.whl
(39.4 kB
view details)
File details
Details for the file tunely-0.3.1.tar.gz.
File metadata
- Download URL: tunely-0.3.1.tar.gz
- Upload date:
- Size: 118.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2bbe92f225bd5e0155f537ccb609e6dc3081b05798b5b06048a7f3679853aa97
|
|
| MD5 |
7331e4f746788be1340f876e45048f29
|
|
| BLAKE2b-256 |
7e55f8e6b6204f2020ba101089434b290df067f532cda99c56699694aa984a31
|
File details
Details for the file tunely-0.3.1-py3-none-any.whl.
File metadata
- Download URL: tunely-0.3.1-py3-none-any.whl
- Upload date:
- Size: 39.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
af94f0269286177e02aaca7ab0cf6e1e941bfe4ac350044dc975d82f836ba423
|
|
| MD5 |
ad1485408b208c79d8f1ed6e1f0cb6f7
|
|
| BLAKE2b-256 |
a7e43e3438da87424c3b7144f883ed090f0bcf436e404beb349a531958cece33
|