-
Notifications
You must be signed in to change notification settings - Fork 391
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
srpc与workflow如何无缝连接使用 #136
Comments
你好,这三个其实都是srpc中的series使用和上下文共享的经典问题:
pread_task = WFTaskFactory::create_pread_task(fd, buf, size, 0,
[buf](WFFileIOTask *) {
// 这里可以拿到捕获进来的buf指针
}); 设置到series上下文的做法: ctx->get_series()->set_context(buf);
pread_task = WFTaskFactory::create_pread_task(fd, buf, size, 0,
[](WFFileIOTask *task) {
buf = series_of(task)->get_context();
});
ctx->get_series()->set_context(buf);
ctx->get_series()->set_callback([](const SeriesWork *series) {
free(series->get_context());
});
|
是的呢。因为rpc里,server task用户无法直接接触到,所以,server task的信息在RPCContext里。RPCContext::get_series()就是得到server task所在的series。 |
workflow里http_file_server示例用server_task的user_data存buf,不是一个很好的方法。rpc server task的user_data好像用户无法利用。所以,你可以利用series context来存放数据,或用fileio_task的user_data似乎也可以。 |
感谢!非常详尽! |
感谢指导,get_series()和workflow自己还没理解特别清楚,不能流畅的使用。 |
我觉得你理解得挺对的啊:)总之就是一切运行中的task一定处于某个series,server task也不例外。rpc task的series是通过ctx->get_series()得到的。 |
我想使用srpc做数据IO服务器,只使用workflow时,有现成的例子,照着做就行(参考http_file_server),但在使用srpc时不知道如何将workflow中的代码和srpc无缝衔接起来,具体问题描述如下:
我在server的Echo中函数体中设置了一个IO读任务,并设置了回调,代码大致如下:
如果参照http_file_server的代码 ,则应该将以下4行类似代码整合到Echo函数中:
但是,server_task在srpc的环境中是不存在的,所以有以下几个问题:
1)没有类似server_task对象,buf中的数据如何传递给pread_task的回调函数?
2)没有类似server_task对象,释放buf怎么释放?如果是使用ctx->get_series()->set_callback函数的话,在里面的lamda函数该如何写呢?
3)series_of(server_task)->push_back(pread_task);这一行在srpc语境中等效于workflow的语句是ctx->get_series()->push_back(pread_task)吗?
辛苦大佬回答。
The text was updated successfully, but these errors were encountered: