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]