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.1.tar.gz (111.8 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.1-py3-none-any.whl (35.1 kB view details)

Uploaded Python 3

File details

Details for the file tunely-0.2.1.tar.gz.

File metadata

  • Download URL: tunely-0.2.1.tar.gz
  • Upload date:
  • Size: 111.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.11

File hashes

Hashes for tunely-0.2.1.tar.gz
Algorithm Hash digest
SHA256 3a4ed79302da4b39aaf04a1a652c6b920bd0bd4a17712d3e09aa75763bf86d52
MD5 6bfb215dd10206c2a1d3b8a7e7c46715
BLAKE2b-256 e631fb335fe13c5b8e02d33f60e4f2a67364049de9251dd6cf83d7853f0710bd

See more details on using hashes here.

File details

Details for the file tunely-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: tunely-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 35.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.11

File hashes

Hashes for tunely-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 5ca8c3fa28acd0f0e7228570b3d7218c13a4cae67dd66ceed331aa9071476e08
MD5 4193618d712fcca5fdd61600b148c71f
BLAKE2b-256 692c492b9c538d92ac4fff7651ebd9b19bec1b80384caf379919d07b29f1a79a

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