Skip to main content

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)并进行流式传输:

  1. 客户端: 自动检测 SSE 响应,发送 StreamStart → StreamChunk* → StreamEnd 消息
  2. 服务端: 使用 forward_stream() 方法获取 AsyncIterator 处理流式数据

协议版本

  • v1.0: 基础请求-响应
  • v1.1: 添加 SSE 流式响应支持

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

tunely-0.2.0.tar.gz (83.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tunely-0.2.0-py3-none-any.whl (23.4 kB view details)

Uploaded Python 3

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

Hashes for tunely-0.2.0.tar.gz
Algorithm Hash digest
SHA256 c7619f12586e4f4e9034719eb68259561f1bf58217c485c2758ac50157531e21
MD5 d9262c0147c0865f79a22f73b3e35668
BLAKE2b-256 d1936d0a8cd8a5f6bba7431b57b7c90d18da871161a131498ae2dd349ce3cbf8

See more details on using hashes here.

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

Hashes for tunely-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b01c0e07cb7b6055414d1d021ad43d9cca3a427501f883eb0039b10d802c7f92
MD5 fc82606bf5c919ac73a4027660ac7090
BLAKE2b-256 2ef0c6810d5cda32da2ecad0ac6dd665e459f3e84575042496dfaadccb1bd856

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page