Grails - 与第三方API的异步通信

时间:2010-12-22 02:01:33

标签: java grails frameworks concurrency asynchronous


我正在尝试使用grails来与在线交易平台进行交互 特别是盈透证券(IB)http://interactivebrokers.com/en/p.php?f=programInterface&ib_entity=llc

API的工作方式是你需要让他们的客户端程序,Trader Workstation(TWS http://interactivebrokers.com/en/p.php?f=tws&ib_entity=llc)运行,然后我们使用API​​来做东西。使用API​​基本上涉及创建“代理”对象,调用connect()成员函数(这使得与TWS软件的本地端口连接)并调用类似getData()的内容

此方案中的Grails值是GORM功能和提供的Web框架。我希望能够定义从db实现中抽象出来的对象,轻松执行持久性操作,并轻松地为用户提供用于执行CRUD和自定义操作的UI。

我的挑战是IB API对请求和回复使用异步通信。即,当我调用getData()时,API知道在准备发送它们时使用回调函数dataResults()。为了使dataResults()可以调用,我创建的代理对象仍然需要在周围接收回复。
在控制器函数内部,如果我创建一个代理对象并调用getData(),当请求完成时,代理对象显然也会消失。所以我永远无法收到回复。

我认为可能有一些方法可以通过开始后台线程来做到这一点,但我不确定这是我想要的路径。

有没有人对最佳方法有什么建议? 我没有和grails结婚,我使用它的原因就在上面。如果有一个桌面应用程序框架,我也可以轻松地在以后的基础上建立一个Web界面,我肯定对此持开放态度。

提前感谢。

2 个答案:

答案 0 :(得分:2)

在服务中创建您的对象和make the Service singleton(默认情况下):

static scope = "singleton"

答案 1 :(得分:0)

就Web UI而言,Grails绝对是一个不错的选择。 然后,异步操作可以由Ajax调用处理,因为您不应该阻止控制器等待结果。 以下[演示] [1]有一些很好的例子

1:http://skillsmatter.com/podcast/java-jee/high-volume-scalable-ajax-with-grails