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.0.tar.gz
(83.9 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.0-py3-none-any.whl
(23.4 kB
view details)
File details
Details for the file tunely-0.2.0.tar.gz.
File metadata
- Download URL: tunely-0.2.0.tar.gz
- Upload date:
- Size: 83.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c7619f12586e4f4e9034719eb68259561f1bf58217c485c2758ac50157531e21
|
|
| MD5 |
d9262c0147c0865f79a22f73b3e35668
|
|
| BLAKE2b-256 |
d1936d0a8cd8a5f6bba7431b57b7c90d18da871161a131498ae2dd349ce3cbf8
|
File details
Details for the file tunely-0.2.0-py3-none-any.whl.
File metadata
- Download URL: tunely-0.2.0-py3-none-any.whl
- Upload date:
- Size: 23.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 |
b01c0e07cb7b6055414d1d021ad43d9cca3a427501f883eb0039b10d802c7f92
|
|
| MD5 |
fc82606bf5c919ac73a4027660ac7090
|
|
| BLAKE2b-256 |
2ef0c6810d5cda32da2ecad0ac6dd665e459f3e84575042496dfaadccb1bd856
|