【发布时间】:2010-12-22 02:01:32
【问题描述】:
我正在试验 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 实现中抽象出来的对象,轻松地进行持久化操作,并轻松地为用户提供 UI 来执行 CRUD 和自定义操作。
我的挑战是 IB API 对请求和回复使用异步通信。即当我调用 getData() 时,API 知道在准备好发送它们时使用回调函数 dataResults()。为了使 dataResults() 可调用,我创建的代理对象仍然需要在附近才能接收回复。
在控制器函数内部,如果我创建一个代理对象并调用 getData(),当请求完成时,代理对象显然也会消失。所以我永远无法收到回复。
我认为可能有一些方法可以通过启动后台线程来做到这一点,但我不确定这是我想要走的路。
有人对最佳方法有什么建议吗?
我没有嫁给grails,我使用它的原因在上面。如果有一个桌面应用程序框架,我以后也可以轻松地在其上制作一个 Web 界面,我肯定对此持开放态度。
提前致谢。
【问题讨论】:
标签: java grails frameworks concurrency asynchronous