Comments (8)
1、你不需要等C返回,完全可以在server_task的callback里再去push_back(c_task)啊。server_task的callback是在回复之后(数据写入tcpbuf)执行的。你在process里push_back,肯定是C返回之后才回复。你非要在process里做的话,那就只能直接start了。这个时候这个C任务的结束和server.stop()以及main的退出,就没有先后关系了,需要你自己处理。我感觉上你就是想在回复之后做点什么事,那就在callback里再push_back(c_task),这种情况,server.stop()会等所有series执行完成。
2、我看不太懂你的描述。总之我们是全程无等待的,在main里用wait_group.wait是为了防止有些任务还没有callback,主进程就退出了。其它任何地方都没有使用wait_group的必要。很奇怪你为什么说要在process里用wait_group来等待,你也是清楚在process里push_back的用法的。你还是重新描述一下你的实际需求吧。
from workflow.
1、你不需要等C返回,完全可以在server_task的callback里再去push_back(c_task)啊。server_task的callback是在回复之后(数据写入tcpbuf)执行的。你在process里push_back,肯定是C返回之后才回复。你非要在process里做的话,那就只能直接start了。这个时候这个C任务的结束和server.stop()以及main的退出,就没有先后关系了,需要你自己处理。我感觉上你就是想在回复之后做点什么事,那就在callback里再push_back(c_task),这种情况,server.stop()会等所有series执行完成。
2、我看不太懂你的描述。总之我们是全程无等待的,在main里用wait_group.wait是为了防止有些任务还没有callback,主进程就退出了。其它任何地方都没有使用wait_group的必要。很奇怪你为什么说要在process里用wait_group来等待,你也是清楚在process里push_back的用法的。你还是重新描述一下你的实际需求吧。
我再整理一下需求,就是客户端A给服务器B发信息,进入服务器B的process函数里,希望服务器B在接到这个信息后把这个信息转发给客户端C,这个转发信息给客户端C的过程最好是与服务器B处理信息回复客户端A是同时去做的,类似一个并行的操作,或者说互不影响,各干各的。只要能做到这一步就行。
1.您的第一个回复我理解了一下,就是在A给B的任务(称为task1)的callback里去push_back给C的任务(task2),是这个意思吗,就是A给服务器B发了任务task1,服务器B已经给A回复了,进入了这个task1的callback,此时我在这个callback里把给C的任务task2 push进去。 如果一定要在serverB的process中去做这个,那就直接在process中创建task2,然后task2->start()也可以。不知道我理解的是否有问题,第一种方案在task1的回调函数里再push_back(c_task)的话我的理解C收到的信息相当于是直接从客户端A发出去的,跟服务器B已经没有关系了。
2.第二个我总结一下,就是目前我在用workflow去做一些业务的时候,比如我需要发送一个http任务task,然后拿到任务的回复后再进行下一步操作,我现在会在task->start()后wait_group.wait(),然后在task的callback里拿到回复的信息再wait_group.done(),然后去执行下一步操作,感觉是完全是一个串行的操作,没拿到消息回复前会一直阻塞住,不知道我现在这样的做法对不对。还是说有更高效的处理方案。。
from workflow.
第一个你就理解错了……
我说的是server_task的callback啊,server_task是可以有callback的啊,这个callback是在回复之后,你可以这么写:
void process(WFHttpTask *server_task)
{
server_task->get_resp()->append_output_body("Hello world!\n");
server_task->set_callback([](WFHttpTask *server_task) {
c_task = ....
series_of(server_task)->push_back(c_task);
});
}
回复之后向C发送,就是实现你说的效果了。
from workflow.
第一个你就理解错了…… 我说的是server_task的callback啊,server_task是可以有callback的啊,这个callback是在回复之后,你可以这么写:
void process(WFHttpTask *server_task) { server_task->get_resp()->append_output_body("Hello world!\n"); server_task->set_callback([](WFHttpTask *server_task) { c_task = .... series_of(server_task)->push_back(c_task); }); }回复之后向C发送,就是实现你说的效果了。
GET到您的意思了,谢谢老哥
from workflow.
第二个问题,如果你是自己的一组线程池,你要等也可以等。不过,我不太明白为什么要这么做,一组串行任务就是在callback里一直push_back就可以了啊。
from workflow.
第一个你就理解错了…… 我说的是server_task的callback啊,server_task是可以有callback的啊,这个callback是在回复之后,你可以这么写:
void process(WFHttpTask *server_task) { server_task->get_resp()->append_output_body("Hello world!\n"); server_task->set_callback([](WFHttpTask *server_task) { c_task = .... series_of(server_task)->push_back(c_task); }); }回复之后向C发送,就是实现你说的效果了。
这个在server_task的callback里加入push_back新任务跟直接在process里创建c_task然后c_task.start()的效率哪个会更高一点呢?我感觉在回调函数里push_back(c_task)看起来更优美一些,感觉是一个非常流畅的串行任务,但是是不是直接c_task.start()会更快一些
from workflow.
第一个你就理解错了…… 我说的是server_task的callback啊,server_task是可以有callback的啊,这个callback是在回复之后,你可以这么写:
void process(WFHttpTask *server_task) { server_task->get_resp()->append_output_body("Hello world!\n"); server_task->set_callback([](WFHttpTask *server_task) { c_task = .... series_of(server_task)->push_back(c_task); }); }回复之后向C发送,就是实现你说的效果了。
这个在server_task的callback里加入push_back新任务跟直接在process里创建c_task然后c_task.start()的效率哪个会更高一点呢?我感觉在回调函数里push_back(c_task)看起来更优美一些,感觉是一个非常流畅的串行任务,但是是不是直接c_task.start()会更快一些
我前面有说,你直接start一个c_task当然可以,但这个task就不受server的控制了。你调用server.stop()完成,可能这个task还没有回来。如果你用push_back的方式的话,server.stop()会等这个series结束。
from workflow.
from workflow.
Related Issues (20)
- 计算线程相关问题 HOT 7
- mysql URL里密码的转义 HOT 16
- 框架现在支不支持创建多个tcp tls客户端任务,每个tls客户端使用的证书私钥以及ca证书都不同的通信方式 HOT 26
- http客户端发送消息 HOT 9
- 有没有复杂一些的http server例子? HOT 1
- 我看了workflow和wfrest,都写得很优雅,上手很快👍🏻。但是我有个疑问,Web服务器为什么不用go和gin呢,而要用workflow?选择workflow的优势有啥? HOT 2
- websocket并发问题咨询 HOT 2
- 用WFFileIOTask写入字符串到文件里出现乱码 HOT 2
- 在tutorial执行"make"报错"collect2: error: ld returned 1 exit status" HOT 7
- 咨询tutorial-05-http-proxy的reply_callback() HOT 2
- 咨询curl向workflow server上传文件,workflow server如何读取文件内容 HOT 2
- httpServerTask的回调函数中设置响应会回复默认响应 HOT 4
- 关于wait_group的详细用法 HOT 26
- 关于workflow TCP连接获取连接地址以及端口问题 HOT 1
- nossl分支tutorial make报错 HOT 4
- 关于GPL许可证兼容性的疑虑 HOT 1
- 支持PostgreSQL协议的讨论帖 HOT 17
- 关于mysql事务的回滚问题 HOT 3
- workflow充当HTTP网关时数据量太大就收不全 HOT 28
- workflow是否支持RPC协议? HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from workflow.