Flex Remote Object多个并行调用

时间:2011-11-11 09:31:12

标签: flex object parallel-processing

我在使用Flash Builder 4.5并且我正在使用带有amfphp的远程对象,当我同时调用两个方法(method1和method2)时,方法2的响应总是在method1的响应之后到达,即使method2更快返回结果。

以下是该方案: 我设置了一个远程对象,它引用了一个远程php类“Newsletter”,其中包含sendNewsletter和getProgress方法。 这是代码:

     

-sendNewsletter()读取电子邮件存档并发送简报。每封电子邮件发送后,它都会将日志写入数据库。 -getProgress()读取sendNewsletter写的日志,计算已发送的电子邮件数,将其与必须发送的电子邮件总数进行比较并返回进度百分比

从flex界面,用户选择要发送的新闻稿,然后单击“发送”按钮,该按钮调用调用sendNewsletter()的函数,然后实例化对getProgress的调用循环(如getProgress返回时所见)它调用setProgress来更新进度条并再次调用getProgress,直到进度百分比达到100%。

所以在我调用sendNewsletter()之后,我在同一个remoteClass()上调用了getProgress()。 sendNewsletter()可能需要几分钟才能完成(在我的测试中发送4封电子邮件大约需要4秒钟,因此我认为发送数千封电子邮件会花费更多!!)而我遇到的麻烦就是getProgress()结果只有在sendNewsletter()结束执行后才会到达,而我想要实现的是: -call sendNewsletter() - 而sendNewsletter()会将其stuff()调用getProgress几次以获得进度百分比:

我现在得到了什么:

致电sendNewsletter()-----------------------&gt;回复  在sendNewsletter()<之后调用getProgress()-------------------------------------&gt;响应/ p>

我想要实现的目标:

sendNewsletter()-------------------------------------------- ----------------------&GT;响应()

getProgress()---&gt;响应,getProgress()再次---&gt;响应 - &gt; getProgress() - &gt; respone - &gt;等......

我阅读了很多关于如何解决这个问题的帖子,但没有解决方案对我有用。 我试图通过创建两个端点设置为gateway.php?parallel = 0和一次gateway.php?parallel = 1的远程对象来“模拟”到不同的通道,但是flash builder仍然会在一个大请求中发送所有内容并获取在一个大的HTTP数据包中响应(我需要拖拽不同的数据包,因为与getProgress相比,sendNewsletter接收年限完成)

我还尝试在sendNewsletter()之后调用getProgress(),调度程序为500ms,flash构建器发出两个不同的调用(我可以在firebug中看到它们)但getProgress的调用在sendNewsletter()之后给出响应

我试图以这种方式调用sendNewsletter this.myNewsletter.getOperation( “sendNewsletter”)。发送(idNewsletter) this.myNewsletter.getOperation( “sendNewsletter”)。取消() 为了让flash builder忘记响应,但没办法!!!

到目前为止,解决方法的唯一方法是创建一个公共的httpservice,它引用一个实例化Newsletter类并调用getProgress方法的php。 通过使用两个不同的通道,我可以在执行sendNewsletter时调用getProgress httpservice。它工作但我不喜欢它,我不想为我需要在后台调用的每个方法创建一个httpservice,所以我想用远程对象来实现这个。

有人解决了同样的问题吗? 你Flash创建大师,我知道你在身边,请帮助我!!!!! 提前致谢!!! 再见, 路加

P.S。 对不起,如果这篇文章有点长,但情况相当复杂。

1 个答案:

答案 0 :(得分:0)

我不确切知道,你想要什么......

但是在使用Remote Object时,最好的做法是使用Responder来处理从单个远程对象并行到达的响应。

因此,请尝试将响应者添加到您的服务调用中,例如

remoteObject.methodCall().addResponder(new YourResponder(resultEvent, faultEvent));

因此,当具体响应到来时,它将由您的不同自定义响应者处理。 通过这种方式,您将能够单独处理您的回复。