如何在 rxcpp 中处理请求/响应流
How to handle a request/response stream in rxcpp
我需要在rxcpp中实现一个相机采样系统。我想象的方式是将requestStream作为参数传递并接收响应流
每次调用 requestSample 时,都会创建一个新的相机会话,当为 requestStream 调用 on_complete(( 时,相机会话将终止
observable<ImageSample> requestSampleStream(observable<ImageRequest> requestStream$) {
auto response$ = rxcpp::observable<>::create<ImageSample>(
[&](rxcpp::subscriber<ImageSample> s){
auto request_next = [&](ImageRequest imageRequest) {
cout << "image request next" << endl;
SampleImage vsi;
s.on_next(vsi);
};
auto request_completed = [&] {
cout << "no more samples needed.. close camera" << endl;
s.on_completed();
};
auto request_error = [&](std::exception_ptr e) {
try { rethrow_exception(e); }
catch (const exception &ex) {
cerr << "error happened on request stream.. close the camera and send error on return stream" << endl << ex.what() << endl;
}
s.on_error(e);
};
requestStream$.subscribe(request_next,
request_error,
request_completed
);
});
return response$;
}
这里的问题是,当requestStream$.subscribe(request_next..
被调用时,我得到了一个EXC_BAD_ACCESS
s
是一个局部堆栈变量,但 lambda 正在捕获对s
的引用。在调用 lambda 时,此引用无效。将[&]
更改为[=]
,这应该有效!
另一种选择是使用现有的map
算法。
observable<ImageSample> requestSampleStream(observable<ImageRequest> requestStream$) {
return requestStream$ |
map([](ImageRequest imageRequest){
cout << "image request next" << endl;
SampleImage vsi;
s.on_next(vsi);
})
// optional
| tap([&](std::exception_ptr e) {
try { rethrow_exception(e); }
catch (const exception &ex) {
cerr << "error happened on request stream.. close the camera and send error on return stream" << endl << ex.what() << endl;
}
},
[](){
cout << "no more samples needed.. close camera" << endl;
})
;
}
相关文章:
- 为什么当通过 TCP 发送的消息速率增加时,请求-响应消息对的延迟会降低?
- 如何在 rxcpp 中处理请求/响应流
- 异步WT :: HTTP ::客户端响应和请求匹配
- 如何调用对带有句点的服务器的请求,并在响应无效时再次发送
- 处理HTTP POST请求/响应
- 生成不带存根的 WSDL 请求/响应
- 使用Resiprocate SIP堆栈转发SIP请求/响应
- IHttp请求响应长度限制
- 请求-响应系统
- 使用lambda的异步请求/响应
- 支持SOAP请求/响应的最佳XML解析器
- 模拟器,发送请求 - 响应并打开TCP连接
- 作为XML字符串提取请求/响应
- 套接字编程中的多个请求/响应
- 如何实现没有陷阱的简单请求-响应技术
- 向facebook(Marmalade c++)发送图片请求响应失败
- 如何进行异步http请求-响应通信(在vc++中请求,在java中响应)
- HTTP 客户端请求响应与 pion-net c++
- Activemq C++请求-响应
- 如何在c++中异步处理本地socket上的https请求响应