我正在创建一个gwt小部件库供我们内部使用。我被要求在我的gwt小部件中的任何控件上发生任何事件时触发一个事件,然后由使用我的小部件的应用程序或项目监听。这个概念看起来类似于我之前用于其他gwt项目的事件总线,用于在同一页面上的不同区域中显示的不同视图之间进行通信。这很好,因为我在整个应用程序中使用了相同的事件总线实例。但现在我将在我的项目中使用事件总线的特定实例,但使用它的应用程序将不会使用相同的实例。我是否继续使用它,或者是否有另一种方法可以在不同的应用程序之间触发事件。请帮忙
答案 0 :(得分:3)
首先,你称之为“不同的应用程序”?他们会在同一个浏览器中运行吗?它们会部署在同一台服务器上吗?
如果您的应用程序不共享EventBus
,则无法使用EventBus
进行通信。
如果您的应用程序在同一选项卡中运行,则可以将EventBus
存储在静态变量中,并从同一选项卡中的其他应用程序中检索它。
如果您的应用程序在同一浏览器中运行(在不同的选项卡上),则可以使用LocalStorage
进行通信。你可以看看:
GWT在LocalStorage
中提供了SessionStorage
(和com.google.gwt.storage.client.Storage
)的实现。
如果它们没有在同一个浏览器中运行,则必须对服务器进行往返,以便从一个应用程序与另一个应用程序进行通信(使用RPC发送消息,并使用RPC轮询来检查新消息) - 或使用服务器推送技术,请参阅GWTEventService和ServerPushFAQ)。
如果它们未部署在同一台服务器上,则必须往返服务器并在服务器之间进行通信(使用套接字,RPC,Web服务......)。
答案 1 :(得分:0)
RabbitMQ救援......这是针对此类问题的规范解决方案。
它是作为软件总线创建的,就像计算机系统的硬件总线一样。
我特别喜欢http://manning.com/videla/本书。它详细介绍了该方法,概述了源代码及其背后的架构。很实用。