找回密码
 立即注册
首页 业界区 业界 NetCore+Web客户端实现gRPC实时推送

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

茅断卉 2025-9-23 22:51:18
之前出过websocket推送,sse推送,grpc的推送应该更具性价比,虽然前端要求复杂了一点点。下面快速的一步一步完成一个netcore服务端+web客户端的推送。
后端项目结构
GrpcRealtimePush/
├── Services/
│   └── ChatService.cs          # gRPC服务实现
├── Protos/
│   └── chat.proto              # Protocol Buffers定义
├── Program.cs                  # 服务启动配置
├── GrpcRealtimePush.csproj     # 项目文件
└── appsettings.json           # 配置文件
1.安装必要的grpc包
  1. <Project Sdk="Microsoft.NET.Sdk.Web">
  2.   <PropertyGroup>
  3.     <TargetFramework>net9.0</TargetFramework>
  4.     <Nullable>enable</Nullable>
  5.     <ImplicitUsings>enable</ImplicitUsings>
  6.   </PropertyGroup>
  7.   <ItemGroup>
  8.     <Protobuf Include="Protos\chat.proto" GrpcServices="Server" />
  9.   </ItemGroup>
  10.   <ItemGroup>
  11.     <PackageReference Include="Grpc.AspNetCore" Version="2.64.0" />
  12.     <PackageReference Include="Grpc.AspNetCore.Web" Version="2.64.0" />
  13.   </ItemGroup>
  14. </Project>
复制代码
 
2.创建好proto文件
  1. syntax = "proto3";
  2. package chat;
  3. option csharp_namespace = "GrpcRealtimePush";
  4. // 服务定义
  5. service ChatService {
  6.   // 服务端流式推送方法
  7.   rpc StartRealtimePush(RealtimePushRequest) returns (stream RealtimePushResponse);
  8. }
  9. // 请求消息
  10. message RealtimePushRequest {
  11.   string client_id = 1;    // 客户端ID
  12.   int64 timestamp = 2;      // 时间戳
  13. }
  14. // 响应消息
  15. message RealtimePushResponse {
  16.   string data = 1;          // 推送数据
  17.   int64 timestamp = 2;      // 时间戳
  18.   string data_type = 3;     // 数据类型
  19. }
复制代码
proto文件定义就这样:
- **`service ChatService`**: 定义gRPC服务
- **`rpc StartRealtimePush`**: 服务端流式方法,返回 `stream`表示持续推送
- **`message`**: 定义请求和响应的数据结构
- **字段编号**: 1, 2, 3等是字段的唯一标识,用于序列化
3.实现上面的方法
[code]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("
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册