tchannel-go

Go implementation of a multiplexing and framing protocol for RPC calls

  • 所有者: uber/tchannel-go
  • 平台:
  • 许可证: MIT License
  • 分类:
  • 主题:
  • 喜欢:
    0
      比较:

Github星跟踪图

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.

主要指标

概览
名称与所有者uber/tchannel-go
主编程语言Go
编程语言Makefile (语言数: 5)
平台
许可证MIT License
所有者活动
创建于2015-09-18 18:28:15
推送于2025-01-08 17:37:32
最后一次提交2025-01-08 09:09:23
发布数56
最新版本名称v1.34.6 (发布于 2025-01-08 09:35:32)
第一版名称v0.01 (发布于 )
用户参与
星数507
关注者数2.5k
派生数86
提交数2.1k
已启用问题?
问题数156
打开的问题数43
拉请求数676
打开的拉请求数11
关闭的拉请求数83
项目设置
已启用Wiki?
已存档?
是复刻?
已锁定?
是镜像?
是私有?