tchannel-go

Go implementation of a multiplexing and framing protocol for RPC calls

  • Owner: uber/tchannel-go
  • Platform:
  • License:: MIT License
  • Category::
  • Topic:
  • Like:
    0
      Compare:

Github stars Tracking Chart

TChannel GoDoc Build Status Coverage Status

TChannel is a multiplexing and framing protocol for RPC calls.
tchannel-go is a Go implementation of the protocol, including client libraries
for Hyperbahn.

If you'd like to start by writing a small Thrift and TChannel service, check
out this guide. For a less opinionated setup, see
the contribution guidelines.

Overview

TChannel is a network protocol that supports:

  • A request/response model,
  • Multiplexing multiple requests across the same TCP socket,
  • Out-of-order responses,
  • Streaming requests and responses,
  • Checksummed frames,
  • Transport of arbitrary payloads,
  • Easy implementation in many languages, and
  • Redis-like performance.

This protocol is intended to run on datacenter networks for inter-process
communication.

Protocol

TChannel frames have a fixed-length header and 3 variable-length fields. The
underlying protocol does not assign meaning to these fields, but the included
client/server implementation uses the first field to represent a unique
endpoint or function name in an RPC model. The next two fields can be used for
arbitrary data. Some suggested way to use the 3 fields are:

  • URI path + HTTP method and headers as JSON + body, or
  • Function name + headers + thrift/protobuf.

Note, however, that the only encoding supported by TChannel is UTF-8. If you
want JSON, you'll need to stringify and parse outside of TChannel.

This design supports efficient routing and forwarding: routers need to parse
the first or second field, but can forward the third field without parsing.

There is no notion of client and server in this system. Every TChannel instance
is capable of making and receiving requests, and thus requires a unique port on
which to listen. This requirement may change in the future.

See the protocol specification for more details.

Examples

  • ping: A simple ping/pong example using raw TChannel.
  • thrift: A Thrift server/client example.
  • keyvalue: A keyvalue Thrift service with separate server and client binaries.

Main metrics

Overview
Name With Owneruber/tchannel-go
Primary LanguageGo
Program languageMakefile (Language Count: 5)
Platform
License:MIT License
所有者活动
Created At2015-09-18 18:28:15
Pushed At2025-01-08 17:37:32
Last Commit At2025-01-08 09:09:23
Release Count56
Last Release Namev1.34.6 (Posted on 2025-01-08 09:35:32)
First Release Namev0.01 (Posted on )
用户参与
Stargazers Count507
Watchers Count2.5k
Fork Count86
Commits Count2.1k
Has Issues Enabled
Issues Count156
Issue Open Count43
Pull Requests Count676
Pull Requests Open Count11
Pull Requests Close Count83
项目设置
Has Wiki Enabled
Is Archived
Is Fork
Is Locked
Is Mirror
Is Private