Skip to content

Add XTCP Support #3

@XYUU

Description

@XYUU

Feature Request: Support for XTCP (P2P UDP Hole Punching)

First of all, thank you for creating tiny-frpc — the project is extremely valuable for embedded environments and minimal client deployments. The small footprint and clean API make it ideal for custom launchers and constrained devices.

🚀 Motivation

Currently, tiny-frpc supports:

  • TCP
  • UDP
  • STCP
  • STCP Visitor (P2P-style but fully relayed through frps)

However, XTCP is not supported.
XTCP is important because it enables true P2P connections via UDP hole punching, allowing traffic to bypass the frps relay once the connection is established.

For scenarios involving:

  • game launchers
  • real-time applications
  • high-bandwidth data streams
  • latency-sensitive communication

…STCP’s full-relay model becomes a bottleneck.
XTCP would significantly reduce latency and server bandwidth usage.

📌 Why XTCP Matters

XTCP provides:

  • NAT traversal via UDP hole punching
  • Direct client-to-client communication
  • Automatic fallback to relay when hole punching fails
  • Lower latency and reduced server load

These benefits are especially useful for:

  • custom game servers
  • P2P tools
  • embedded devices
  • private networks

🛠️ Potential Implementation Notes

I understand tiny-frpc aims to remain minimal, but even a simplified XTCP implementation would be extremely helpful.

Possible approach:

  • Implement basic XTCP handshake
  • Support UDP hole punching
  • Reuse existing event loop and connection management
  • Provide a minimal API similar to STCP

Even partial support (without fallback relay) would already unlock many use cases.

🙏 Request

Would it be possible to consider adding XTCP support to tiny-frpc in future versions?

If needed, I’m willing to:

  • help test early builds
  • provide real-world usage scenarios
  • contribute documentation or examples

Thank you again for your excellent work on this project!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions