在这种情况下,我应该使用哪种Erlang行为,即gen_服务器或gen_fsm

在这种情况下,我应该使用哪种Erlang行为,即gen_服务器或gen_fsm,erlang,otp,gen-server,gen-fsm,Erlang,Otp,Gen Server,Gen Fsm,我正在开发一个解决方案,用于查询soapweb服务中的某些事务。一旦检索到,这些事务将保存在数据库中,然后调用回调url将一些数据发送到另一台服务器。您如何才能最好地设计出这个问题的解决方案。我的困惑点是,是否应该使用gen_server或gen_fsm,如果应该,解决方案的哪个组件应该放在哪里,也就是说,如果gen_server,哪个任务放在服务器上,哪个任务放在客户端上。思考哪些任务可以在您的系统中并行执行。SOAP查询可以并行完成吗?它有意义吗?在再次查询SOAP时,是否可以将事务写入数据

我正在开发一个解决方案,用于查询soapweb服务中的某些事务。一旦检索到,这些事务将保存在数据库中,然后调用回调url将一些数据发送到另一台服务器。您如何才能最好地设计出这个问题的解决方案。我的困惑点是,是否应该使用gen_server或gen_fsm,如果应该,解决方案的哪个组件应该放在哪里,也就是说,如果gen_server,哪个任务放在服务器上,哪个任务放在客户端上。

思考哪些任务可以在您的系统中并行执行。SOAP查询可以并行完成吗?它有意义吗?在再次查询SOAP时,是否可以将事务写入数据库?数据应该在事务写入数据库后发送到另一台服务器,还是可以同时发送

一旦知道了这些答案,就可以构建管道。一个例子是:

  • 一个进程,它定期查询SOAP服务并对每批事务调用一个函数
  • 在该功能中,启动两个进程;一个将事务写入数据库,另一个将数据发送到服务器。这些过程相互独立
这只是一个例子,根据您的需求,您可能必须以另一种方式来组织事情


通常,这些进程都可以是
gen_服务器
,因为它们都没有任何清晰的状态。事实上,这两个工作进程根本不必是
gen_服务器
,因为它们只执行一个任务,然后就死了。在这种情况下使用
gen\u服务器
太过分了。

谢谢!对不起,我的回答含糊不清,但你的回答帮助我澄清了一些想法。只需指出,数据在保存到数据库后通过url发送。我正在考虑使用gen_fsm查询web服务(在两种状态之间交替进行,即获取、获取。然后将数据发送到gen_服务器,该服务器动态启动两个gen_FSM,一个用于保存数据,另一个用于通过url发送数据。我确信gen_FSM可能有些过分,但查询web服务的组件是gen_服务器的某种客户端。我认为
gen_fsm
在这种情况下会有些过分,因为在“获取”状态下,您只需在该过程中调用SOAP库,所以它无论如何都会很忙。因为它只向其他进程发送数据,所以其他任何人都不需要知道它的“状态”。与其说它是一个状态机,不如说它是一个生产者。如果您想先向数据库写入数据,然后再将数据发送到另一台服务器,我会在一个过程中完成,而不是两个过程中完成(如果可以按顺序完成,也就是说)。这给了你一个更简单和可预测的系统。我甚至不想让它成为一个
gen\u服务器
,而是一个由
simple\u one\u for\u one
主管监控的简单工作人员。为了澄清一下,你的意思是我有一个工作人员查询由one\u管理的web服务,查找一个主管和另一个简单的工作用于保存到数据库并调用由简单的\u one \u for \u one supervisor管理的url的er(因为工人是为检索到的每个事务动态生成的)。请提供建议。是的,这将是一个很好的方法。在考虑主管结构时,考虑需要监督的内容以及它如何依赖于其他部分也很重要。在这种情况下,您的员工并不真正依赖于查询过程(因为他们已经拥有所需的数据)而且查询过程实际上并不依赖于已启动的工作人员(它只是启动新的工作人员),因此它们不需要在同一个主管下。不过,它们可能应该在同一个主管树下。