gRPC双向流式通信实战,深度解读Java与Go微服务高效交互秘诀

C# 搭建GRPC,实现双向通信 一、新建项目,定义GRPC服务接口 vs新建dll项目,项目中NuGet程序包添加Grpc相关引用 定义服务,创建.proto文件 创建文件CorrespondService.proto syntax = "proto3"; package My.Public; service CorrespondGrpcService { rpc SendMsg(GrpcData) returns (GrpcResult); rpc ReceiveDataFromServer(GrpcData) r 阅读详情

第一章:gRPC双向流式通信概述

gRPC 双向流式通信是 gRPC 四种通信模式中最灵活的一种,允许客户端和服务器同时发送多个消息。在这种模式下,双方通过同一个持久连接独立地读写数据流,适用于实时性要求高、交互频繁的场景,如聊天系统、实时通知服务或协同编辑工具。

工作原理

在双向流式通信中,客户端调用方法时建立连接,并获取一个可读写的流对象。服务器接收到请求后,也使用对应的流对象进行响应。双方可以按需发送多条消息,且消息顺序由应用层保证。
定义服务接口
在 Protocol Buffer 文件中定义双向流式方法时,使用 stream 关键字修饰请求和响应类型:
syntax = "proto3";

service ChatService {
  // 双向流式方法
  rpc ChatStream(stream Message) returns (stream Message);
}

message Message {
  string content = 1;
  string sender = 2;
}
上述定义表示 ChatStream 方法接收一个消息流,并返回一个消息流,客户端与服务器均可持续发送消息。

典型应用场景

  • 实时多人聊天系统
  • 远程过程调用中的进度推送
  • 设备与服务器间的持续状态同步
  • 在线游戏中的事件广播

优势对比

通信模式客户端流服务器流双向流
数据流向单向(C→S)单向(S→C)双向(C↔S)
连接复用否否是
适用场景批量上传实时推送全双工交互
graph LR A[客户端] -- 发送消息流 --> B[gRPC 运行时] B -- 转发 --> C[服务器端] C -- 处理并返回消息流 --> B B -- 推送 --> A

第二章:环境准备与Protobuf协议定义

2.1 搭建Java与Go的gRPC开发环境

在构建跨语言微服务架构时,gRPC因其高效性能和多语言支持成为首选。本节将指导完成Java与Go语言环境下gRPC开发的基础配置。
环境依赖准备
确保已安装以下工具:
  • JDK 11+(Java开发)
  • Go 1.18+(Go语言环境)
  • Protocol Buffers 编译器(protoc)
  • gRPC Java 和 Go 插件
生成gRPC代码
使用protoc编译器结合语言插件生成客户端和服务端桩代码。以定义服务的proto文件为例:
syntax = "proto3";
package example;
service Greeter {
  rpc SayHello (HelloRequest) returns (HelloReply);
}
message HelloRequest { string name = 1; }
message HelloReply { string message = 1; }
执行命令:
protoc --go_out=. --go-grpc_out=. greeter.proto(生成Go代码)
protoc --java_out=. --grpc-java_out=. greeter.proto(生成Java代码) 上述命令调用protoc分别使用Go和Java插件,生成对应语言的数据结构和服务接口,为后续实现业务逻辑奠定基础。

2.2 使用Protobuf 3.25设计双向流接口

在gRPC中,双向流式RPC允许客户端和服务器同时发送多个消息,适用于实时通信场景。使用Protobuf 3.25定义此类接口时,需在`.proto`文件中声明`stream`关键字。
接口定义示例
syntax = "proto3";
package example;

service DataSync {
  rpc SyncStream(stream DataRequest) returns (stream DataResponse);
}

message DataRequest {
  string event_id = 1;
  bytes payload = 2;
}

message DataResponse {
  string status = 1;
  int32 code = 2;
}
上述定义中,`SyncStream`方法接收一个客户端流并返回一个服务器流,实现全双工通信。`stream`修饰符表明该字段为流式传输,适合持续数据同步。
核心优势与适用场景
  • 低延迟:双方可异步推送数据,无需等待请求-响应周期
  • 资源高效:复用单个TCP连接,减少连接开销
  • 适用于聊天系统、实时日志传输、IoT设备通信等场景

2.3 生成Java与Go的gRPC stub代码

在定义好 `.proto` 文件后,需通过 Protocol Buffer 编译器 `protoc` 生成对应语言的 gRPC 存根代码。
生成命令示例
protoc --java_out=. --go_out=. \
       --plugin=protoc-gen-grpc-java=path/to/grpc-java-plugin \
       --grpc-go_out=. \
       service.proto
该命令分别调用 Java 和 Go 的 gRPC 插件。`--java_out` 生成 Java 普通类,`--grpc-java-plugin` 生成服务接口与存根;`--go_out` 与 `--grpc-go_out` 分别生成 Go 结构体与 gRPC 接口。
依赖插件说明
  • protoc-gen-grpc-java:Maven 构建时自动集成,用于生成 Java gRPC 客户端与服务端接口;
  • protoc-gen-go-grpc:Go 模块中需引入 google.golang.org/grpc,支持服务注册与远程调用。

2.4 理解gRPC流式调用的底层通信机制

gRPC流式调用基于HTTP/2协议实现,利用其多路复用特性在单个TCP连接上并行传输多个请求和响应。这种机制避免了传统HTTP/1.x的队头阻塞问题,显著提升了通信效率。
流式模式类型
gRPC支持四种流式模式:
  • 单项流:客户端发送一次,服务端返回一次
  • 客户端流:客户端连续发送多条消息,服务端最终返回响应
  • 服务端流:客户端发起请求,服务端持续推送多条数据
  • 双向流:双方可独立、持续地收发消息
数据帧传输机制
HTTP/2将gRPC消息拆分为多个DATA帧,通过STREAM标识关联。每个帧可独立传输,接收端按流ID重组。

// 示例:服务端流式响应
func (s *Server) StreamData(req *Request, stream Service_StreamDataServer) error {
    for i := 0; i < 10; i++ {
        if err := stream.Send(&Response{Value: fmt.Sprintf("msg-%d", i)}); err != nil {
            return err
        }
    }
    return nil
}
该代码中,stream.Send()将响应分批写入HTTP/2流,底层由gRPC运行时封装为DATA帧并异步传输,客户端通过迭代接收完成数据同步。

2.5 跨语言兼容性与版本管理实践

在微服务架构中,跨语言兼容性是系统可扩展性的关键。不同服务可能使用 Go、Python、Java 等多种语言开发,需依赖统一的通信协议和数据格式。
接口定义与协议选择
采用 Protocol Buffers 配合 gRPC 可实现高效、跨语言的服务通信。通过 .proto 文件定义接口,生成各语言客户端代码:

syntax = "proto3";
service UserService {
  rpc GetUser (UserRequest) returns (UserResponse);
}
message UserRequest {
  string user_id = 1;
}
上述定义可生成 Go、Python 等语言的 stub 代码,确保语义一致性。
版本管理策略
  • 语义化版本控制(SemVer):主版本号变更表示不兼容的API修改
  • 并行版本支持:网关层路由不同版本请求
  • 弃用策略:提前通知并保留旧版本至少一个周期

第三章:Java微服务端实现与优化

3.1 基于Netty的gRPC服务端构建

在高性能微服务架构中,使用Netty作为传输层支撑gRPC服务端能显著提升并发处理能力。Netty的异步非阻塞特性与gRPC的HTTP/2协议天然契合,为低延迟通信提供保障。
核心依赖配置
需引入gRPC-Netty模块以启用基于Netty的服务端实现:
<dependency>
    <groupId>io.grpc</groupId>
    <artifactId>grpc-netty-shaded</artifactId>
    <version>1.58.0</version>
</dependency>
该依赖封装了Netty与gRPC的集成逻辑,避免类路径冲突,同时提供ServerBuilder的Netty后端支持。
服务启动流程
通过NettyServerBuilder创建服务实例:
Server server = NettyServerBuilder
    .forPort(8080)
    .addService(new MyServiceImpl())
    .build()
    .start();
其中`forPort`指定监听端口,`addService`注册gRPC服务实现,最终`start()`启动基于Netty EventLoop的I/O线程模型,处理HTTP/2帧的编解码与流控。

3.2 双向流消息的异步处理模型

在分布式系统中,双向流消息机制允许客户端与服务器同时发送和接收数据流,适用于实时通信场景,如在线协作、视频通话等。
核心处理流程
基于 gRPC 的双向流可通过异步任务解耦消息收发逻辑,提升系统吞吐量。每个连接由独立协程管理,避免阻塞主调用链。
stream, _ := client.BidirectionalStream(ctx)
go func() {
    for msg := range sendCh {
        stream.Send(msg)
    }
}()
for {
    resp, err := stream.Recv()
    if err != nil { break }
    process(resp)
}
上述代码中,发送与接收分别运行在独立的 goroutine 中,实现全双工通信。Send 和 Recv 调用非阻塞,依赖底层异步 I/O 多路复用。
性能优化策略
  • 使用缓冲 channel 控制消息队列长度,防止内存溢出
  • 引入背压机制,根据消费者能力调节消息速率
  • 结合 context 实现超时与取消传播,保障资源及时释放

3.3 流控与背压机制在Java中的应用

在响应式编程中,流控与背压是保障系统稳定性的核心机制。当数据生产速度超过消费能力时,背压机制可通知上游减缓发射速度,避免资源耗尽。
背压在Reactor中的实现
Reactor框架通过`Flux`和`Mono`支持背压,消费者通过请求机制控制数据流:

Flux.range(1, 1000)
    .onBackpressureBuffer()
    .subscribe(new BaseSubscriber() {
        @Override
        protected void hookOnRequest(long n) {
            System.out.println("请求 " + n + " 个元素");
        }

        @Override
        protected void hookOnNext(Integer value) {
            // 模拟处理延迟
            try { Thread.sleep(10); } catch (InterruptedException e) {}
            request(1); // 手动请求下一个
        }
    });
上述代码中,`onBackpressureBuffer()`将溢出数据暂存缓冲区,`request(1)`实现逐个请求,防止内存溢出。
常见背压策略对比
策略行为适用场景
drop丢弃新元素实时性要求高,允许丢失
buffer缓存至内存短时流量激增
error超限抛异常防止系统崩溃

第四章:Go客户端实现与交互测试

4.1 使用gRPC-Go发起双向流请求

在gRPC-Go中,双向流允许客户端和服务器同时发送多个消息,适用于实时通信场景。
定义服务接口
首先在Protobuf中定义双向流方法:

rpc BidirectionalStream (stream Request) returns (stream Response);
该定义表示客户端和服务端均可持续发送消息流。
客户端实现逻辑
使用生成的客户端调用方法后,返回一个流对象,可并发读写:

stream, _ := client.BidirectionalStream(context.Background())
go func() {
    for _, req := range requests {
        stream.Send(req)
    }
    stream.CloseSend()
}()
for {
    resp, err := stream.Recv()
    if err == io.EOF { break }
    // 处理响应
}
Send() 发送请求,Recv() 接收响应,通过goroutine实现并行收发。

4.2 流数据的实时发送与接收控制

在流式数据处理中,实时发送与接收的精准控制是保障系统低延迟与高可靠的关键环节。通过背压机制(Backpressure)可有效协调生产者与消费者之间的速率差异。
背压控制策略
当消费者处理能力不足时,上游发送方需动态降低发送速率。常见策略包括:
  • 基于缓冲区水位的反馈控制
  • 显式ACK确认机制
  • 速率自适应算法(如Token Bucket)
代码实现示例
func (s *StreamSender) Send(data []byte) error {
    select {
    case s.dataCh <- data:
        // 发送成功
    case <-time.After(100 * time.Millisecond):
        return errors.New("send timeout due to backpressure")
    }
    return nil
}
该Go语言片段展示了带超时控制的数据发送逻辑。通过select监听通道写入与超时事件,防止因下游阻塞导致发送方挂起,实现基础的流量节制。
控制参数对比
机制响应速度实现复杂度
超时丢弃快低
速率限制中中
动态背压慢高

4.3 错误传播与连接重试策略实现

在分布式系统中,网络波动或服务暂时不可用是常见问题。为提升系统的容错能力,需设计合理的错误传播机制与连接重试策略。
重试策略的核心参数
  • 最大重试次数:防止无限循环重试导致资源浪费;
  • 退避间隔:采用指数退避可减少服务压力;
  • 超时阈值:控制每次尝试的等待时间。
Go语言实现示例
func retryWithBackoff(operation func() error, maxRetries int) error {
    var err error
    for i := 0; i < maxRetries; i++ {
        if err = operation(); err == nil {
            return nil
        }
        time.Sleep(time.Duration(1 << i) * time.Second) // 指数退避
    }
    return fmt.Errorf("操作失败,已重试 %d 次: %v", maxRetries, err)
}
上述代码通过指数退避机制控制重试节奏,避免雪崩效应。每次失败后延迟时间翻倍,给予下游服务恢复窗口。
错误传播控制
使用中间件拦截底层异常,封装为统一错误类型向上抛出,确保调用方逻辑清晰且易于处理。

4.4 Java与Go服务间性能对比测试

在微服务架构中,Java与Go的性能差异显著影响系统吞吐与响应延迟。为量化对比,采用相同业务逻辑实现订单查询接口,分别基于Spring Boot(Java 17)与Gin框架(Go 1.21),部署于相同Docker环境。
测试场景设计
  • 并发用户数:500
  • 请求总量:100,000
  • 服务资源:2核CPU,4GB内存
性能指标对比
指标Java (Spring Boot)Go (Gin)
平均延迟48ms22ms
QPS20834545
内存峰值980MB180MB
典型Go处理代码

func GetOrder(c *gin.Context) {
    id := c.Param("id")
    // 模拟DB查询耗时
    time.Sleep(10 * time.Millisecond)
    c.JSON(200, gin.H{"id": id, "status": "shipped"})
}
该函数注册为HTTP GET处理器,使用Gin上下文解析路径参数,模拟数据库访问后返回JSON。其轻量级协程模型显著降低调度开销,配合静态编译特性,提升整体执行效率。

第五章:总结与微服务通信演进方向

通信模式的多样化选择
现代微服务架构中,通信方式已从单一的同步调用向多模式融合演进。REST 依然广泛用于简单场景,但在高吞吐、低延迟需求下,gRPC 凭借 Protocol Buffers 和 HTTP/2 的特性成为首选。

// gRPC 定义示例
service UserService {
  rpc GetUser (UserRequest) returns (UserResponse);
}

message UserRequest {
  string user_id = 1;
}
事件驱动架构的崛起
通过消息中间件实现异步通信,如 Kafka 或 RabbitMQ,已成为解耦服务的关键手段。某电商平台将订单创建事件发布至 Kafka,库存、物流等服务订阅处理,显著提升系统响应性与容错能力。
  • 服务间依赖降低,故障传播风险减小
  • 支持流量削峰,应对突发请求更从容
  • 数据一致性通过事件溯源(Event Sourcing)保障
服务网格的透明化治理
Istio 等服务网格技术将通信逻辑下沉至 Sidecar,实现负载均衡、熔断、链路追踪等功能的统一管理。某金融客户在 Kubernetes 集群中部署 Istio,无需修改业务代码即实现全链路加密与细粒度流量控制。
通信方式延迟(ms)吞吐(QPS)适用场景
REST/JSON50-1001k-3k内部工具、管理后台
gRPC5-2010k+核心交易链路
Kafka异步百万级日志聚合、事件通知
单体 REST gRPC Kafka Service Mesh
网络编程(23)——使用grpc进行通信 一元RPC该文件用于定义名为Greeter 的gRPC 服务和两个消息类型:HelloRequest 和 HelloReply。指定使用 Protocol Buffers 的语法版本,这里使用的是 proto3 版本;定义 protobuf 文件所属的包,包名 hello 将这个 proto 文件中定义的所有内容(包括服务和消息)归属于一个逻辑命名空间,防止与其他 proto 文件中的定义冲突;定义名为 Greeter 的 gRPC 服务; 阅读详情

相关推荐

Grpc学习总结--四种模式(C++实现)

目录 Protobuf定义(包括四种模式的接口定义和所用到的简单传输结构) Service 传输结构 单向模式 服务端函数实现 客户端函数实现 运行结果 服务端流 服务端实现 客户都安实现 运行结果 客户端流 服务端实现 客户端实现 运行结果 双向流 服务端实现 客户端实现 运行结果 踩过的一些坑 GRPC的四种模式,分别实现了单工,双工通信,客户端和服务...

qq_22545985的博客 6923

聊一聊 gRPC 的四种通信模式

温馨提示:本文需要结合一起食用,否则可能看不懂。前面一篇文章松哥和大家聊了 gRPC 的基本用法,今天我们再来稍微深入一点点,来看下 gRPC 中四种不同的通信模式。接下来松哥就通过四个完整的案例,来分别和向伙伴们演示这四种不同的通信模式。

江南一点雨的专栏 2238

gRPC双向流式传输与WebSocket的比较与实践

本文深入探讨了gRPC中的双向流式RPC与WebSocket协议的特点、使用场景和实现方式。通过实际代码示例,展示了如何构建和运行gRPC客户端和服务器,以及如何通过双向流实现实时、双向的数据交互。同时,文章还比较了gRPC和WebSocket在性能、安全性、消息序列化等方面的差异,并根据不同的应用场景给出了选择的建议。

weixin_35364187的博客 1574

gRPC流式通信全攻略,彻底搞懂Java中的四种Streaming模式

掌握gRPC流式通信的完整解决方案,深入解析Java中四种Streaming模式的应用场景与实现方法。本Java gRPC开发指南涵盖服务端流、客户端流、双向流等核心技巧,提升系统通信效率,值得收藏。

FuncWander的博客 986

产业园区如何高效对接企业技术需求与高校科研成果?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

国央企创新负责人如何快速掌握本地科技资源分布与匹配情况?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

【学习笔记】gRPC 协议详细介绍

【学习笔记】gRPC 协议详细介绍

m0_51429770的博客 3154

国央企创新负责人如何实现科技成果的精准识别与高效筛选?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

gRPC双向流式通信全解析,深度解读Java与Go跨语言协作秘诀

掌握Java与Go微服务的gRPC双向流式通信实践,解决跨语言实时通信难题。涵盖流式接口设计、数据交互优化及错误处理机制,提升系统性能与可维护性。多语言协作高效稳定,值得收藏。

StepLens的博客 343

深入解析PVT corner:从wcl到ml的芯片设计关键考量

本文深入解析了芯片设计中的PVT corner概念,重点探讨了从传统WC到先进工艺下WCL、ML等关键工艺角。文章详细阐述了温度反转效应如何使低温WCL成为最严苛的时序场景,并提供了基于先进工艺的实战签核策略与多角多模分析流程,确保芯片在极端工艺、电压、温度下的稳健性。

tree8的博客 527

企业级AI Agent平台建设方案

本报告将深入剖析构成一个顶级AI Agent平台的各个功能层面,为构建者提供一份全面的战略蓝图。

分享AI和大数据领域的知识和研究 1582

Node.js 使用 gRPC:从定义到实现

gRPC(gRPC Remote Procedure Calls)是一个高性能、开源的远程过程调用(RPC)框架,由 Google 开发。它支持多种编程语言,旨在简化和优化分布式系统中的服务通信。2. gRPC的优势:高性能:使用 HTTP/2 和 protobuf 使得 gRPC 在性能和效率方面表现出色。二进制协议和 HTTP/2 的多路复用特性使其通信开销低,速度快。简化开发:自动代码生成和多语言支持简化了微服务的开发和维护

weixin_71329368的博客 2619

从零开始:用LabVIEW和ModbusTCP协议,像搭积木一样连接Delta PLC

本文详细介绍了如何利用LabVIEW的图形化编程环境和ModbusTCP工业协议,快速连接Delta PLC实现数据通信。通过模块化配置和实战案例,指导读者无需编写复杂代码即可完成寄存器读取、多数据类型处理及系统监控,显著提升工业自动化项目的开发效率与部署速度。

n8m7b6v5c4的博客 697

用最少的代码模拟gRPC四种消息交换模式

作为模拟,客户端会携带一个名字列表(“foo,bar,baz,qux”),服务端以流的形式针对每个名字回复一个问候消息,具体的实现体现在针对请求路径“/serverstream”的路由处理方法HandleServerStreamCallAsync上。MessageContent将代表ProtoBuf消息的IMessage对象作为主体内容,在重写的SerializeToStreamAsync,我们调用上面定义的WriteMessageAsync扩展方法将指定的IMessage对象写入输出流中。

jh035512的博客 505

一网打尽身份验证与授权:深入剖析ASP.NET Core Identity在C#中的全方位实战应用

ASP.NET Core Identity 是 Microsoft 提供的一个强大且可扩展的身份验证和授权框架,用于构建基于用户账户、角色和权限的Web应用程序。它提供了用户注册、登录、密码管理、多因素认证、角色分配、授权等功能,与ASP.NET Core框架深度集成,简化了安全相关的开发工作。通过上述代码示例和注释,展示了如何安装配置Identity、自定义用户实体与数据库上下文、实现用户注册登录、管理角色与用户角色关系,以及如何使用授权策略保护应用程序资源。,并指定用户和角色类型以及主键类型。

java专栏 1528

[Python人工智能] 三十六.基于Transformer的商品评论情感分析 (2)keras构建多头自注意力(Transformer)模型

本专栏开始,作者正式研究Python深度学习、神经网络及人工智能相关知识。前一篇文章利用Keras构建深度学习模型并实现了情感分析。这篇文章将介绍Transformer基础知识,并通过Keras构建多头自注意力(Transformer)模型,实现IMDB电影影评数据情感分析。基础性文章,希望对您有所帮助!...

杨秀璋的专栏 4908

Grpc 双向流模式的使用

Grpc介绍: gRPC (https://grpc.io) 是一个由Google开发的高性能、开源、跨多种编程语言和通用的远程过程调用协议(RPC) 框架,用于客户端和服务器端之间的通信,使用HTTP/2协议并将 ProtoBuf (https://developers.google.com/protocol-buffers)作为序列化工具。 Grpc几种通信方式: gRPC主要有4种请求/...

月下独奏的博客 1万+

告别传统RAG的痛点!Agent Skills让知识库检索更智能(本地知识库搭建新思路:用Agent Skills实现渐进式检索)

传统RAG在知识库检索中存在文档结构丢失、Token消耗大等问题 📚 Agent Skills通过分层索引、渐进式检索等设计,实现了更智能的本地知识库检索方案 🤖 本文详细介绍了Agent Skills的核心设计理念、与传统RAG的对比以及实践建议,帮助你搭建高效的知识库系统 ✅

XiaoqiangClub的博客 693

.net core gRPC 一元,流通信 --- (单工 双工)

文章目录一元调用客户端流模式双向流模式服务端流模式 #.NET 客户端调用 gRPC 服务的四种通信方式 一元调用 客户端流模式 双向流模式 服务端流模式 一元调用 一元调用从客户端发送请求消息开始。 服务完成后,将返回响应消息。 客户端流模式 客户端流式处理调用在客户端发送消息的情况下启动。 客户端可以选择发送发送消息RequestStream.WriteAsync。 当客户端已经完成发送消...

iml6yu的博客 1467

Cartographer实现双雷达建图

TRAJECTORY_BUILDER_2D.num_accumulated_range_data = 2 --执行一次前端匹配需要的激光扫描分段数量。关于num_subdivisions_per_laser_scan。num_laser_scans =2,--订阅激光扫描话题数量。Frame改为 前雷达laser_1 后雷达laser_2。雷达的话题由scan改为,前scan_1 后scan_2。有些人说需要改成2,但我这里改成2反而不行,1才可以。

Studying…… 1261

抖音 X-Gorgon 加密算法逆向与 Python 爬虫实战(2026 最新版)

抖音(TikTok 国内版)作为日活超 8 亿的超级 App,其反爬体系在国内互联网中属于顶级难度。核心签名参数X-Gorgon和X-Khronos是几乎所有业务接口(视频详情、评论、搜索、用户主页)的“通行证”。没有正确的 Gorgon 签名,服务器直接返回403或。市面上的教程大多停留在2023 年之前的 V4 版本,而抖音在 2025 年底全面升级到了V6 协议,算法结构、加密常数、混淆方式全部重构。

2201_76125261的博客 352

(笔记)网络通信:TCP实现全双工,客户端和服务端进行控制台输入交流

package demo; import java.io.*; import java.net.*; public class Server { public static void main(String[] args) { try { ServerSocket ss = new ServerSocket(1026); Socket s = ss.accept(); ...

weixin_42325507的博客 2378

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

基于grpc的流式方式实现双向通讯(python)

grpc介绍 grpc是谷歌开源的一套基于rpc实现的通讯框架(官网有更完整的定义)。在搞懂grpc之前,首先要弄懂rpc是什么。下面是自己理解的rpc定义,若有不对,望指出: rpc官方称为 远程过程调用 。我这里理解为远程函数调用,即一个本机程序调用另一个机器的程序中的某个函数。因不是同一机器调用,故需要远程访问操作。 与远程过程调用相反的则是“近程过程调用”(哈哈,自己乱起的)。其实就是...

xiaobai_ol的博客 7377

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

gRPC开发: gRPC的四种通信模式

引言 gRPC应用程序共有四种基础的通信模式,分别为:一元RPC,服务端流RPC,客户端流RPC以及双向流RPC 注:阅读本文,如果没有gRPC基础的同学可以看我之前关于如何简单构建gRPC客户端和服务端的文章: gRPC开发:go语言构建简单的服务端和客户端 一元RPC模式 服务定义: //ecommerce/order_management.pb.go syntax="proto3"; //导入这个包,使用常用的数据类型,如StringValue import "google/protobu

weixin_45685541的博客 3119

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

grpc双向流

简介grpc是一个高性能、开源和通用的 RPC 框架,面向移动和 HTTP/2 设计。目前提供 C、Java 和 Go 语言版本,分别是:grpc, grpc-java, grpc-go. 其中 C 版本支持 C, C++, Node.js, Python, Ruby, Objective-C, PHP 和 C# 支持.gRPC 基于 HTTP/2 标准设计,带来诸如双向流、流控、头部压缩、单 T...

weixin_34072458的博客 3269

gRPC

【原文地址 点击打开链接】 和http主要区别:  1、gRPC是由Google主导开发的RPC框架,使用HTTP/2协议并用ProtoBuf作为序列化工具。  2、gRPC是动态代理的模式实现的,客户端应用可以像调用本地对象一样直接调用另一台不同的机器上服务端应用的方法。  3、和传统的REST不同的是gRPC使用了静态路径,从而提高性能,另外开发者不用了解各种底层网络协

大神了没 4077
上一篇: Python实现AI代码优化实战(基于CodeLlama的重构黑科技)
下一篇: Java注解处理器进阶之路(打造企业级代码生成框架)
CodeWhim
博客等级 码龄1年 153粉丝 2003原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值