服务端是如何主动推送信息到客户端的?

像天气类,新闻类 app,服务端是怎么把信息发送给每一个客户端的?
在我的认识里,打开网页或app去查询或者刷新时,客户端向服务器发出请求然后返回数据。 而服务端主动推送到客户端是怎么一个过程呢?
(特别不明白应用服务器如何确定每一个应用所在的设备,服务端把消息推到哪?客户端又不像服务器有一个固定的地址)

各位大神的意思是:现在的app,仍然是以客户端主动向服务端请求为主? 类似中国移动给全网信号内所有手机发消息这种不存在? 

我这问题很多余么
1 条评论 
分享
按投票排序 按时间排序

19 个回答

在gRPC中,服务端主动推送数据到客户端需要使用流式RPC。流式RPC允许服务端客户端之间建立一个持久化连接,从而允许它们在连接上相互发送多个消息。 下面是一个简单的示例,展示了如何在gRPC中使用流式RPC实现服务端主动推送数据到客户端: ```protobuf // 定义服务 service MyService { // 定义一个客户端服务器流式RPC方法 rpc ServerStreamMethod(MyRequest) returns (stream MyResponse) {} } // 实现服务 class MyServiceImpl : public MyService::Service { public: // 实现客户端服务器流式RPC方法 Status ServerStreamMethod(ServerContext* context, const MyRequest* request, ServerWriter<MyResponse>* writer) override { // 循环发送数据到客户端 while (true) { MyResponse response; // 发送数据 writer->Write(response); } // 返回OK状态 return Status::OK; } }; // 启动服务 void RunServer() { std::string server_address("0.0.0.0:50051"); MyServiceImpl service; ServerBuilder builder; builder.AddListeningPort(server_address, grpc::InsecureServerCredentials()); builder.RegisterService(&service); std::unique_ptr<Server> server(builder.BuildAndStart()); std::cout << "Server listening on " << server_address << std::endl; server->Wait(); } ``` 在这个示例中,`MyService`定义了一个名为`ServerStreamMethod`的客户端服务器流式RPC方法。服务端实现了这个方法,并在其中循环发送数据到客户端客户端可以通过接收服务端发送的多个消息来接收数据。 需要注意的是,在使用流式RPC时,必须使用`stream`关键字来定义参数类型。例如,`stream MyResponse`表示一个可以接收多个`MyResponse`消息的流。在服务端实现中,需要使用`ServerWriter`来发送消息。在客户端实现中,需要使用`ClientReader`来接收消息。 希望这个示例能够帮助你理解如何在gRPC中实现服务端主动推送数据到客户端
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值