服务端主动推送数据、长连接

本文介绍了EventSource接口,它允许服务器通过持久连接主动向客户端推送数据。EventSource实例保持HTTP连接开放,以text/event-stream格式发送事件,直到被关闭。文章将探讨服务端和客户端如何实现这一功能。
摘要由CSDN通过智能技术生成

EventSource

  • 服务端主动推动数据

EventSource 是服务器主动向客户端推送数据的一个网络事件接口。一个 EventSource 实例会对 HTTP 服务开启一个持久化的连接,以 text/event-stream 格式发送事件, 会一直保持开启直到被要求关闭。

服务端

// node 的实现

// 单边通讯,服务器主动推送客户端
const fs = require("fs");
const http = require("http");
let server = http.createServer((req, res) => {
   
  let url = req.url;
  if (url === "/") {
   
    // 这个路由主要是显示界面(当然如果不需要 node 加载 html 文件,也可以不用这个路由)
    res.setHeader("Content-Type", "text/html;charset=utf-8");
    let rStream = fs.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在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、付费专栏及课程。

余额充值