当前位置: 首页 > news >正文

网店网站建设制作图片软件下载

网店网站建设,制作图片软件下载,无人在线观看高清完整视频下载,花钱做网站注意些什么最近公司需要无感知基于服务代号来实现通信, 并监控和管理通信连接,目前公司使用的是如下的逻辑(当然逻辑简化了,但是思想不变) 目录 简单的原理图代理服务的实现创建 tls tcp 服务, 用于grpc client 和 grpc service 通信保存 与 代理服务建立的 grpc …

最近公司需要无感知基于服务代号来实现通信, 并监控和管理通信连接,目前公司使用的是如下的逻辑(当然逻辑简化了,但是思想不变)

目录

    • 简单的原理图
    • 代理服务的实现
      • 创建 tls tcp 服务, 用于grpc client 和 grpc service 通信
      • 保存 与 代理服务建立的 grpc service 的连接
      • 保存 grpc client dial 的连接
        • client 连接上了的时候告诉 tcp server, 要连接哪个 grpc service
        • 从 保存的conn 中查询是否有 相关的连接
        • 如果有,则 通过 io.Copy 来让grpc client 与 grpc service 通信
      • 代码地址

简单的原理图

schematic diagram

代理服务的实现

创建 tls tcp 服务, 用于grpc client 和 grpc service 通信

func Run() error {// 创建 CA证书 用于 tls 连接ca, err := private_keys.NewCA("127.0.0.1")if err != nil {log.Fatal(err)}serverCA, err := tls.X509KeyPair(ca.CertPem(), ca.KeyPem())if err != nil {log.Fatal(err)}tlsServerConfig := &tls.Config{Certificates: []tls.Certificate{serverCA},}// 创建 带 tls 的tcp服务listener, err := tls.Listen("tcp", fmt.Sprintf(":%d", Port), tlsServerConfig)if err != nil {log.Printf("Error tcp listening on port %d: %v\n", Port, err)return err}fmt.Println("TCP Listening on port ", Port, "; successfully")for {conn, err := listener.Accept()if err != nil {log.Printf("Error accepting connection: %v\n", err)return err}fmt.Println("tcp new connection")// 处理请求go forwardCommunication(conn)}return nil
}func forwardCommunication(conn net.Conn) error {// 首次连接上的时候,通信告诉 tcp server 是客户端连接还是服务端连接bufBytes, err := ReadData(conn)if err != nil {return err}device := &Device{}err = json.Unmarshal(bufBytes, device)if err != nil {log.Printf("Error unmarshalling json: %v\n", err)return err}
}

保存 与 代理服务建立的 grpc service 的连接

func server(deviceID string, conn net.Conn) error {sendData, err := json.Marshal(OK{Code: 1})if err != nil {log.Printf("Error marshalling json: %v\n", err)return err}sendData = append(sendData, '@')_, err = conn.Write(sendData)if err != nil {log.Printf("Error writing to connection: %v\n", err)return err}// 保存 grpc 服务的 dial connectsetConnMap(deviceID, conn)return nil
}

保存 grpc client dial 的连接

client 连接上了的时候告诉 tcp server, 要连接哪个 grpc service
从 保存的conn 中查询是否有 相关的连接
如果有,则 通过 io.Copy 来让grpc client 与 grpc service 通信
func client(deviceID string, conn net.Conn) error {toConn := GetConn(deviceID)successCode := 0if toConn == nil {successCode = -1}sendData, _ := json.Marshal(OK{Code: successCode})_, err := conn.Write(append(sendData, MessageEnd))if err != nil {log.Printf("Error writing to connection: %v\n", err)}if successCode < 0 {conn.Close()return err}go func() {_, err := io.Copy(toConn, conn)if err != nil {log.Printf("client toConn error reading from connection: %v\n", err)}log.Printf("toConn conn closed.\n")return}()go func() {_, err := io.Copy(conn, toConn)if err != nil {log.Printf("client conn error reading from connection: %v\n", err)}log.Printf("conn toConn closed.\n")}()fmt.Println("Client connected to device", deviceID)return nil
}

代码地址

https://github.com/wanmei002/websocket-reverse-proxy

http://www.yayakq.cn/news/584625/

相关文章:

  • 网站推广阶段网站域名到期会怎么样
  • 网站建设策划书 备案wordpress如何调整行距
  • 怎样用电脑和网訨自己做网站做爰视频网站
  • 网站做流量是怎么回事一张图片做单页网站
  • 钟表网站开发背景文章2023网络舆情案例分析
  • 南宫职业教育中心示范校建设网站php是网站开发语言吗
  • 张家界酒店网站建设wordpress广告代码没显示
  • 漯河哪里做网站兄弟连php网站开发
  • 深圳彩票网站开发人员信息类网站有哪些
  • 企业网站的建设一般要素有郑州快速建站价格
  • 网站换新的空间域名解析怎么做咋做个人网站
  • 萧山做网站的公司沈阳个人网站建设选择
  • 设计logo网站侵权吗知乎苏州网站建设企业网站制作
  • 手机网站如何更改典当行 网站
  • 枣庄市网站建设湖南it网站建设mxtia
  • 东莞微网站建设多少钱app加盟代理
  • 微网站自己怎么做wordpress做成app
  • 家用电脑怎么做网站wordpress菜单显示在哪
  • 在厦门做网站找谁用vs2010做网站登录
  • 东莞网站制作公司怎么选择wordpress标题字体改大
  • 公司的网站设计方案杭州网络游戏公司排名
  • 网站建设之婚礼摄影网站设计电商网站多少钱
  • 建设网站简单吗国内免费域名注册
  • 代加工接订单网站咸鱼网站交易付款怎么做
  • 网站图片有什么要求吗163企业邮箱怎么申请
  • 哈尔滨自助建站系统嘉兴定制型网站建设
  • 广东科技网站建设长春建站公众号
  • 网站建设学习什么网站设计步骤是什么
  • 哪里有做网站公司的班级网站建设php
  • 区域网站设计简单网页制作过程