xiehan
xiehan
> > > @idealvin 我觉得可以调用异步客户端返回后直接yield, 以在call_back(异步客户端框架的线程中)中调用唤醒. 不过我是直接在call_back中调用了add_ready_task. 这样就集成了. 你觉得呢 > > > > > > 这样是可以的,可以贴下代码,看看还需要暴露哪些接口 > > 我用add_ready_task实现啦, 目前不用暴露了. 不过如果可以封装成比如signal唤醒更合适一些. 😳 能不能开源一下实现。如果给workflow搞协程,可以把series对用户隐藏,series context用来存放协程上下文。
@jiangdongzi
是的呢。因为rpc里,server task用户无法直接接触到,所以,server task的信息在RPCContext里。RPCContext::get_series()就是得到server task所在的series。 如果反过来,想着http server里访问rpc,那么可以用Client::create_xxx_task的方式产生一个rpc任务,然后调用task->serialize_input的接口,序列化rpc任务,再调用series_of(http_server_task)->push_back(rpc_task)。rpc_task的user_data可以利用,done里也是通过RPCContext::get_user_data()拿回。 示例里这些用法都有。
workflow里http_file_server示例用server_task的user_data存buf,不是一个很好的方法。rpc server task的user_data好像用户无法利用。所以,你可以利用series context来存放数据,或用fileio_task的user_data似乎也可以。
我觉得你理解得挺对的啊:)总之就是一切运行中的task一定处于某个series,server task也不例外。rpc task的series是通过ctx->get_series()得到的。
基于SPRC的注册中心是我们另一个项目,还没有开源。SRPC本身更纯粹一点:)
感谢使用srpc哈。有什么问题随时反馈。 Linux版本的workflow功能更多更加稳定,上线推荐Linux版。windows版则性能更强,因为IOCP本身比epoll要快。
我们的zlib默认是用的submodule,如果里这么下载srpc: git clone https://github.com/sogou/srpc --recursive 应该是引用我们下载下来的,而不是你系统里的。
@dengjunplusplus @holmes1412
是不是你clone的时候一直没有加--recursive? 需要加一下,然后 cd workflow git checkout windows 然后再编译。