Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用zeromq实现任务场消息传递模式_Php_C++_Python_C_Zeromq - Fatal编程技术网

Php 使用zeromq实现任务场消息传递模式

Php 使用zeromq实现任务场消息传递模式,php,c++,python,c,zeromq,Php,C++,Python,C,Zeromq,我正在使用来解决一个涉及数百(可能数千)个客户请求执行任务的问题。每个客户都会要求执行特定的任务,完成后的结果将返回给发出该请求的客户 这些是我迄今为止确定的演员,按照我提出的模式: 客户:这是请求执行工作单元(或“作业”)的参与者 控制器:这是在可用引擎之间对“作业”进行负载平衡的参与者 引擎:这是从控制器接收作业请求并将结果发布回客户端的参与者 我还没有弄清楚引擎是如何将mesage返回给客户的。我猜想,使用zeromq实现此功能的一种方法是: 客户端: 将一个套接字上的作业消息推送到另

我正在使用来解决一个涉及数百(可能数千)个客户请求执行任务的问题。每个客户都会要求执行特定的任务,完成后的结果将返回给发出该请求的客户

这些是我迄今为止确定的演员,按照我提出的模式:

  • 客户:这是请求执行工作单元(或“作业”)的参与者
  • 控制器:这是在可用引擎之间对“作业”进行负载平衡的参与者
  • 引擎:这是从控制器接收作业请求并将结果发布回客户端的参与者
我还没有弄清楚引擎是如何将mesage返回给客户的。我猜想,使用zeromq实现此功能的一种方法是:

客户端:
将一个套接字上的作业消息推送到另一个套接字上的控制器订阅引擎发布的已完成结果 插座

控制器:
从一个套接字上的客户端提取作业消息将作业消息发布到另一个套接字上的引擎(显然,这将是一个转发设备)

引擎:
订阅一个套接字上的作业消息将结果发布到另一个套接字

如果有人提供一个框架/代码片段,它将展示如何使用zeromq框架实现此模式,这将非常有用

<代码>代码段可以在C、C++、PHP、Python或C<< /P>中。 [[编辑]]

阅读任务农场后(如akappa所建议)。我认为这个问题确实可以通过任务场来建模。我相应地修改了我原来的演员(并更改了标题)


如果熟悉zeromq的人能够勾勒出一个框架,展示我如何使用核心组件构建这样一个框架,这仍然是非常有用的。

这是一个经典的主/从并行模式(也称为“场”或“任务场”)

有十亿种方法可以实现它。
有一种使用MPI实现它的方法,也许它可以启发您在zeromq中实现它。

有多种方法可以实现这一点,包括两种zeromq实现——一种是简单的纯zmq,另一种是更复杂的,控制器用Python实现

我们将控制器分为两个参与者:

  • 集线器-一个隐蔽的过程,可查看所有流量,并跟踪群集状态,将结果推送到数据库等,通知客户端有关引擎连接/断开连接等
  • 调度程序-其核心是一个简单的路由器-经销商设备,将客户机的请求转发到引擎,并备份回复
  • 仅查看拓扑结构中的任务农业部分:

    • 调度器是一个0MQ队列设备,带有路由器和经销商套接字,两者都绑定
    • 客户端有经销商插座,连接到调度器的路由器
    • 引擎的路由器插座连接到调度器的经销商
    它利用了这两个特性:

    • 经销商跨对等点的LRU负载平衡请求
    • 路由器使用身份前缀将回复发送回发出特定请求的对等方
    带有pyzmq的玩具负载平衡任务场,将回复路由回请求客户端:


    另一种选择是,在0MQ指南中,结果会出现在某个地方,但不会备份到请求的客户端。

    唯一让我感到吃惊的是,客户端和工作人员似乎是同一件事。他们都要求一个工作单元,完成后再回复。@CodeReaper:不完全是-也许我最初的问题形式不太好。在akappa为我指出了正确的方向后,我更新了这个问题。我已经看过你提供的链接,正在研究代码。如果没有人能够拿出一个片段/大纲来演示如何使用zeromq实现此模式,那么默认情况下我将接受您的答案。