grpc代理服务的实现(二)

目录

    • grpc service 的实现
      • grpc服务通过unix域监听请求
      • 建立与代理服务的tcp连接
      • 请求转发到 unix 上
      • 代码地址

grpc service 的实现

假设 grpc service 的服务名是 Bar

grpc服务通过unix域监听请求

```go
svr := grpc.NewServer()
messages.RegisterBarServer(svr, bar.New())
reflection.Register(svr)
os.Remove(sockPath)
lis, err := net.Listen("unix", sockPath)
if err != nil {log.Fatalf("failed to listen: %v", err)
}
go func() {if err := svr.Serve(lis); err != nil {log.Fatalf("failed to serve: %v", err)}
}()
```

建立与代理服务的tcp连接

   // 与代理服务器建立连接conn, err := tls.Dial("tcp", fmt.Sprintf("127.0.0.1:%d", tcp_server.Port), &tls.Config{InsecureSkipVerify: true})if err != nil {log.Printf("dial tcp failed: %v\n", err)return err}// 与代理服务器通信,告诉它 是提供服务者firstWrite := &tcp_server.Device{ID: deviceID, Type: tcp_server.DeviceTypeServer}writeData, err := json.Marshal(firstWrite)if err != nil {log.Printf("marshal first write failed: %v\n", err)return err}_, err = conn.Write(append(writeData, tcp_server.MessageEnd))if err != nil {log.Printf("write first write failed: %v\n", err)return err}bufBytes, err := tcp_server.ReadData(conn)if err != nil {log.Printf("read first write failed: %v\n", err)return err}recvData := &tcp_server.OK{}err = json.Unmarshal(bufBytes, recvData)if err != nil {log.Printf("unmarshal first write failed: %v\n", err)return err}if recvData.Code < 0 {log.Printf("first write failed: %v\n", recvData.Code)return errors.New("first write failed")}

请求转发到 unix 上

   // 与本地的 unix 建立连接unixConn, err := net.Dial("unix", sockPath)if err != nil {log.Fatalf("failed to dial unix: %v", err)}go func() {defer wg.Done()_, err = io.Copy(conn, unixConn)if err != nil {log.Printf("io.Copy failed: %v\n", err)return}fmt.Println("copy conn end")}()go func() {defer wg.Done()_, err = io.Copy(unixConn, conn)if err != nil {log.Printf("io.Copy failed unixConn: %v\n", err)return}fmt.Println("copy unixConn end")}()return nil

代码地址

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/27036.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

免杀笔记 ----> 后续更新安排

前一段时间&#xff0c;我疯狂更新了内网&#xff0c;本来想把NTLM-Relay给更上的&#xff0c;但是计划安排不允许了&#xff0c;之后后续再给大家进行深入的内网更新了&#xff01;&#xff01; &#xff1a;&#xff1a; 真不是我托更 嘻嘻嘻~~~ 说回正题&#xff0c;接下来…

算法体系-22 第二十二节:暴力递归到动态规划(四)

一 最小距离累加和 1.1 描述 给定一个二维数组matrix&#xff0c;一个人必须从左上角出发&#xff0c;最后到达右下角 沿途只可以向下或者向右走&#xff0c;沿途的数字都累加就是距离累加和 返回最小距离累加和 1.2 分析

把服务器上的镜像传到到公司内部私有harbor上,提高下载速度

一、登录 docker login https://harbor.cqxyy.net/ -u 账号 -p 密码 二、转移镜像 minio 2024.05版 # 指定tag docker tag minio/minio:RELEASE.2024-05-10T01-41-38Z harbor.cqxyy.net/customer-software/minio:RELEASE.2024-05-10T01-41-38Z# 推送镜像 docker push harbo…

陕西印刷平台的元宇宙之旅:打造创意印刷新纪元

在数字化时代的浪潮中&#xff0c;陕西印刷平台不断追求创新与卓越&#xff0c;将目光投向了新兴的元宇宙领域。作为传统印刷业的先行者&#xff0c;陕西印刷平台致力于将先进的元宇宙技术融入传统印刷之中&#xff0c;为品牌和个人提供独一无二的创意印刷解决方案。此刻&#…

学习笔记——交通安全分析04

目录 前言 当天学习笔记整理 交通行为、心理与安全 结束语 前言 #随着上一轮SPSS学习完成之后&#xff0c;本人又开始了新教材《交通安全分析》的学习 #整理过程不易&#xff0c;喜欢UP就点个免费的关注趴 #本期内容接上一期03笔记 #最近感觉有点懒&#xff0c;接受各位…

【AI应用探讨】— GPT-4o模型应用场景

目录 1. 自然语言处理&#xff08;NLP&#xff09;任务 文本生成 机器翻译 问答系统 2. 聊天机器人与虚拟助手 智能聊天机器人 虚拟助手与陪伴 3. 内容创作与辅助 创意写作 代码生成 4. 教育辅助 学习工具 5. 客户服务与支持 客户服务聊天机器人 技术支持 6. 研…

GitLab教程(六):通过rebase来合并commit

文章目录 1.理解和操作rebase&#xff08;1&#xff09;rebase的逻辑&#xff08;2&#xff09;实践演示 2.rebase的优缺点 1.理解和操作rebase &#xff08;1&#xff09;rebase的逻辑 Git Rebase的基本逻辑是将一个分支的更改移到另一个分支上&#xff0c;同时看起来好像这…

流批一体计算引擎-9-[Flink]中的数量窗与时间窗

1 数量窗 1.1 数量滚动窗口 0基础学习PyFlink——个数滚动窗口(Tumbling Count Windows) 1.1.1 代码分析 Tumbling Count Windows是指按元素个数计数的滚动窗口。 滚动窗口是指没有元素重叠的窗口。 (1)构造了一个KeyedStream&#xff0c;用于存储word_count_data中的数据。…

英伟达算法岗面试,问的贼专业。。。

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学。 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 合集&#x…

接口返回的文字段落换行问题

接口返回的文字段落换行问题 解决方案&#xff1a;文本中包含\r\n, 使用v-html显示文本&#xff0c;并给便签添加&#xff1a;white-space: pre-wrap;

【Linux】Linux环境基础开发工具_6

文章目录 四、Linux环境基础开发工具gdb 未完待续 四、Linux环境基础开发工具 gdb 我们已经可以写代码了&#xff0c;也能够执行代码了&#xff0c;但是代码错了该如何调试呢&#xff1f;Linux中可以使用 gdb 工具进行调试。 我们写一个简单的程序&#xff1a; 但是我们尝试…

汇编:宏的使用

汇编语言中的宏是用于定义可重复使用的代码块或指令集合的强大工具。宏通过简化代码编写和提高可读性&#xff0c;使得编写和维护汇编程序更加方便&#xff1b;在 MASM&#xff08;Microsoft Macro Assembler&#xff09;中&#xff0c;宏的定义和使用非常常见。以下是对汇编语…

java面试题:springMVC的执行流程

请求到达前端控制器DispatcherServlet&#xff0c;该组件是SpringMVC的核心组件&#xff0c;负责接收所有的请求。 DispatcherServlet根据请求中的URL和HandlerMapping找到对应的Controller对象&#xff0c;HandlerMapping是一个接口&#xff0c;定义了请求的URL和对应的Contro…

【linux网络(三)】HTTP协议详解

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:Linux从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学更多操作系统知识   &#x1f51d;&#x1f51d; Linux网络 1. 前言2. 序列化和…

定个小目标之刷LeetCode热题(16)

针对本题排序流程&#xff0c;主要是将链表拆分为长度为subLength的子链表1和子链表2&#xff0c;然后把子链表1和子链表2合并为一条有序链表&#xff0c;重复上述步骤直到把链表都拆分完&#xff0c;这样这条链表每段长度为2的子链表都是有序的&#xff0c;那么要整条链表有序…

学习ZYNQ——HLS

文章目录 前言一、HLS是什么&#xff1f;二、HLS开发流程三、HLS工程创建四、代码编写1.led.h2.led.cpp3.test_led.cpp 五、C仿真与C综合六、联合仿真七、添加ap_int.h八、再次进行C仿真的Cosimulation九、导出IP核的时候出现报错&#xff1a; 前言 本文主要记录自己学习HLS的…

JavaScript-DOM

DOM 全称&#xff1a;DOM(Document Object Model--文档对象类型) 作用&#xff1a;用来操控网页类容的功能&#xff0c;开发网页特效和实现用户交互 DOM 结构 将HTML文档以树形结构表现出来称之为DOM树 获取DOM 语法&#xff1a;document.querySelector(css选择器) 参数&…

AIGC实践|用AI制作视频短片创作全流程

前言&#xff1a; 在深入探讨了AI在动态有声绘本和小游戏开发的应用之后&#xff0c;本次我们将聚焦于视频创作领域。本篇文章将详细展示如何使用AI工具从概念构思到画面生成再到最终成片的全过程&#xff0c;涵盖剧本创作、分镜头设计、视觉效果生成及音乐配制等各个阶段。让…

B+索引的分裂及选择率和索引基数

1、B树索引的分裂 B树索引页的分裂并不总是从页的中间记录开始&#xff0c;这样可能会导致页空间的浪费。 例子 比如下面这个记录&#xff1a; 1、2、3、4、5、6、7、8、9 由于插入是以自增的顺序进行的&#xff0c;若这时插入第10条记录然后进行页的分裂操作&#xff0c;那…

鹧鸪云光伏业务管理系统,助力企业数智化发展

在当今数字化浪潮席卷全球的背景下&#xff0c;光伏行业作为绿色能源的重要组成部分&#xff0c;其业务管理的数智化转型显得尤为重要。鹧鸪云光伏业务管理系统&#xff0c;以其强大的功能和卓越的性能&#xff0c;正成为企业实现数智化转型的重要助力。 作为光伏行业的领军软…