Giter Site home page Giter Site logo

workflow server能否在process中向另一个客户端创建http任务发送数据 还有对 workflow wait_group使用的问题 about workflow HOT 8 CLOSED

MasterL-min avatar MasterL-min commented on June 3, 2024
workflow server能否在process中向另一个客户端创建http任务发送数据 还有对 workflow wait_group使用的问题

from workflow.

Comments (8)

Barenboim avatar Barenboim commented on June 3, 2024

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.

MasterL-min avatar MasterL-min commented on June 3, 2024

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.

Barenboim avatar Barenboim commented on June 3, 2024

第一个你就理解错了……
我说的是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.

MasterL-min avatar MasterL-min commented on June 3, 2024

第一个你就理解错了…… 我说的是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.

Barenboim avatar Barenboim commented on June 3, 2024

第二个问题,如果你是自己的一组线程池,你要等也可以等。不过,我不太明白为什么要这么做,一组串行任务就是在callback里一直push_back就可以了啊。

from workflow.

MasterL-min avatar MasterL-min commented on June 3, 2024

第一个你就理解错了…… 我说的是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.

Barenboim avatar Barenboim commented on June 3, 2024

第一个你就理解错了…… 我说的是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.

Barenboim avatar Barenboim commented on June 3, 2024

@MasterL-min

from workflow.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.