這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
Teleport beta2.0 實現了一個全新的Golang TCP Socket架構,它通用、高效、靈活!可被用於Peer-Peer對等通訊、RPC、長串連網關、微服務、推送服務,遊戲服務等領域。
teleport_server
1. 特性
- 伺服器和用戶端之間對等通訊,兩者API方法基本一致
- 底層通訊資料包包含
Header
和Body
兩部分
- 支援單獨定製
Header
和Body
編碼類別型,例如JSON
Protobuf
Body
支援gzip壓縮
Header
包含狀態代碼及其描述文本
- 支援推,拉,回複等通訊方式
- 支援外掛程式機制,可以自訂認證、心跳、微服務註冊中心、統計資訊外掛程式等。
- 無論伺服器或用戶端,均支援都優雅重啟、優雅關閉
- 支援實現反向 Proxy功能
- 日誌資訊詳盡,支援列印輸入、輸出訊息的詳細資料(狀態代碼、訊息頭、訊息體)
- 支援設定慢操作警示閾值
- 底層串連使用I/O緩衝區
- 端點間通訊使用I/O多工技術
AB Testing 1: [Mac 4CPU 8GB] [single-process single-conn] teleport: QPS 37550
teleport_frame_client_ab_test
AB Testing 2: [Mac 4CPU 8GB] [single-process single-conn] teleport/socket: QPS 55419
teleport_socket_client_ab_test
2. 架構
2.1 名稱解釋
- Peer:通訊端點,可能是用戶端或用戶端
- Session:串連會話,具有推、拉、回複、關閉等操作
- Context:處理收到的或發送的資料包
- Pull-Launch:從對端Peer拉資料
- Pull-Handle:處理和回複對端Peer的拉請求
- Push-Launch:將資料推送到對端Peer
- Push-Handle:處理同伴的推送
- Router:Handler註冊路由
2.2 執行層次
Peer -> Connection -> Socket -> Session -> Context
2.3 資料包
HeaderLength | HeaderCodecId | Header | BodyLength | BodyCodecId | Body
注意:
- HeaderLength: uint32, 4 bytes, big endian
- BodyLength: uint32, 4 bytes, big endian
- HeaderCodecId: uint8, 1 byte
- BodyCodecId: uint8, 1 byte
type Packet struct { // HeaderCodec header codec name HeaderCodec string `json:"header_codec"` // BodyCodec body codec name BodyCodec string `json:"body_codec"` // header content Header *Header `json:"header"` // body content Body interface{} `json:"body"` // header length HeaderLength int64 `json:"header_length"` // body length BodyLength int64 `json:"body_length"` // HeaderLength + BodyLength Length int64 `json:"length"`}
2.4 頭資訊
type Header struct { // Packet id Id string // Service type Type int32 // Service URI Uri string // Body encoding type Gzip int32 // As reply, it indicates the service status code StatusCode int32 // As reply, it indicates the service status text Status string}
3. 開源項目
項目地址:https://github.com/henrylee2cn/teleport
授權協議:Apache2.0