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.2.3.tar.gz
(111.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.2.3-py3-none-any.whl
(35.1 kB
view details)
File details
Details for the file tunely-0.2.3.tar.gz.
File metadata
- Download URL: tunely-0.2.3.tar.gz
- Upload date:
- Size: 111.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 |
3406a7c1db620c96e2836d94c2856ecb17c22232980dc92d4e1a0f79d0b338a6
|
|
| MD5 |
1f8f45d4cdd12bfb1201898bfff07b9c
|
|
| BLAKE2b-256 |
3e4d9a81fb3b53e71a7e1b478b62879a072e07e51bcc473906dc7e7d2f47176a
|
File details
Details for the file tunely-0.2.3-py3-none-any.whl.
File metadata
- Download URL: tunely-0.2.3-py3-none-any.whl
- Upload date:
- Size: 35.1 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 |
7d373b950418bfe804f331ec280ae96360266b780c8d8e946351d220f01c7a87
|
|
| MD5 |
3ff981865256f74a5467dafa586a76b1
|
|
| BLAKE2b-256 |
98a4a8a1327265375db356d1c978e39ac64595a0ac426f909578dd65cf79b987
|