茅断卉 发表于 2025-9-23 22:51:18

NetCore+Web客户端实现gRPC实时推送

之前出过websocket推送,sse推送,grpc的推送应该更具性价比,虽然前端要求复杂了一点点。下面快速的一步一步完成一个netcore服务端+web客户端的推送。
后端项目结构
GrpcRealtimePush/
├── Services/
│   └── ChatService.cs          # gRPC服务实现
├── Protos/
│   └── chat.proto            # Protocol Buffers定义
├── Program.cs                  # 服务启动配置
├── GrpcRealtimePush.csproj   # 项目文件
└── appsettings.json         # 配置文件
1.安装必要的grpc包
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
    <TargetFramework>net9.0</TargetFramework>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>

<ItemGroup>
    <Protobuf Include="Protos\chat.proto" GrpcServices="Server" />
</ItemGroup>

<ItemGroup>
    <PackageReference Include="Grpc.AspNetCore" Version="2.64.0" />
    <PackageReference Include="Grpc.AspNetCore.Web" Version="2.64.0" />
</ItemGroup>
</Project> 
2.创建好proto文件
syntax = "proto3";

package chat;

option csharp_namespace = "GrpcRealtimePush";

// 服务定义
service ChatService {
// 服务端流式推送方法
rpc StartRealtimePush(RealtimePushRequest) returns (stream RealtimePushResponse);
}

// 请求消息
message RealtimePushRequest {
string client_id = 1;    // 客户端ID
int64 timestamp = 2;      // 时间戳
}

// 响应消息
message RealtimePushResponse {
string data = 1;          // 推送数据
int64 timestamp = 2;      // 时间戳
string data_type = 3;   // 数据类型
}proto文件定义就这样:
- **`service ChatService`**: 定义gRPC服务
- **`rpc StartRealtimePush`**: 服务端流式方法,返回 `stream`表示持续推送
- **`message`**: 定义请求和响应的数据结构
- **字段编号**: 1, 2, 3等是字段的唯一标识,用于序列化
3.实现上面的方法
using Grpc.Core;namespace GrpcRealtimePush.Services;public class ChatService : GrpcRealtimePush.ChatService.ChatServiceBase{    private readonly ILogger _logger;    public ChatService(ILogger logger)    {      _logger = logger;    }    public override async Task StartRealtimePush(RealtimePushRequest request,         IServerStreamWriter responseStream, ServerCallContext context)    {      _logger.LogInformation("
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: NetCore+Web客户端实现gRPC实时推送