热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Teleport2.0一个GolangTCPSocket的全新框架

Teleport2.0实现了一个全新的GolangTCPSocket框架,它通用、高效、灵活!可被用

Teleport2.0 实现了一个全新的Golang TCP Socket框架,它通用、高效、灵活!可被用于Peer-Peer对等通信、RPC、长连接网关、微服务、推送服务,游戏服务等领域。

1. 特性

  • 服务器和客户端之间对等通信,两者API方法基本一致

  • 底层通信数据包包含Header和Body两部分

  • 支持单独定制Header和Body编码类型,例如JSON Protobuf

  • Body支持gzip压缩

  • Header包含状态码及其描述文本

  • 支持推,拉,回复等通信方式

  • 支持插件机制,可以自定义认证、心跳、微服务注册中心、统计信息插件等

  • 无论服务器或客户端,均支持都优雅重启、优雅关闭

  • 支持实现反向代理功能

  • 日志信息详尽,支持打印输入、输出消息的详细信息(状态码、消息头、消息体)

  • 支持设置慢操作报警阈值

  • 底层连接使用I/O缓冲区

  • 端点间通信使用I/O多路复用技术

Teleport 2.0 一个 Golang TCP Socket 的全新框架

teleport-server-peer

Teleport 2.0 一个 Golang TCP Socket 的全新框架

AB Testing 1: [Mac 4CPU 8GB] [single-process single-conn] teleport: QPS 37550

Teleport 2.0 一个 Golang TCP Socket 的全新框架

AB Testing 2: [Mac 4CPU 8GB] [single-process single-conn] teleport/socket: QPS 55419

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


【声明】文章转载自:开源中国社区 [http://www.oschina.net]


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 我们


推荐阅读
  • PHP输出缓冲控制Output Control系列函数详解【PHP】
    后端开发|php教程PHP,输出缓冲,Output,Control后端开发-php教程概述全景网页源码,vscode如何打开c,ubuntu强制解锁,sts启动tomcat慢,sq ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 本文介绍了响应式页面的概念和实现方式,包括针对不同终端制作特定页面和制作一个页面适应不同终端的显示。分析了两种实现方式的优缺点,提出了选择方案的建议。同时,对于响应式页面的需求和背景进行了讨论,解释了为什么需要响应式页面。 ... [详细]
  • 本文介绍了OkHttp3的基本使用和特性,包括支持HTTP/2、连接池、GZIP压缩、缓存等功能。同时还提到了OkHttp3的适用平台和源码阅读计划。文章还介绍了OkHttp3的请求/响应API的设计和使用方式,包括阻塞式的同步请求和带回调的异步请求。 ... [详细]
  • 用SpringBoot实现万能文件在线预览
    推荐一个用SpringBoot搭建的文档在线预览解决方案:kkFileView,一款成熟且开源的文件文档在线预览项目解决方案,对标业内付 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • MongoDB用户验证auth的权限设置及角色说明
    本文介绍了MongoDB用户验证auth的权限设置,包括readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase、cluster相关的权限以及root权限等角色的说明和使用方法。 ... [详细]
  • 开发中,EXT封装的.NET控件,使用了ExtJsExtenderControl的开源控件,发现个问题,就是每次控件加载,都需要调EXT_ALL.JS文件,600K,导致页面加载很慢。想对这个问题进行 ... [详细]
author-avatar
mobiledu2502856973
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有