2012-11-29 19 views
1

我正在为我们的内部使用创建一个gwt小部件库。我被要求在我的gwt小部件中的任何控件发生任何事件时触发事件,然后由应用程序或正在使用我的小部件的项目进行监听。这个概念与我之前用于其他gwt项目的事件总线类似,用于在同一页面上的不同区域中显示的不同视图之间进行通信。这很好,因为我在应用程序中使用了相同的事件总线实例。但是现在我将在我的项目中使用事件总线的特定实例,但使用它的应用程序将不会使用同一个实例。我会继续使用它还是有另一种方法来在不同的应用程序之间激发事件。请帮忙可以使用事件总线在不同的项目或应用程序之间进行通信

回答

0

RabbitMQ救援......这是这类问题的典型解决方案。

http://www.rabbitmq.com/

它的建立为软件总线,就像一个硬件总线是计算机系统。

我特别喜欢http://manning.com/videla/这本书。它详细介绍了该方法,概述了源代码及其背后的架构。非常实用。

+1

不幸的是,RabbitMQ在GWT中不起作用(GWT代码实际上是在JS中编译并在浏览器上运行,因此只有Java类和功能的子集可用)。 –

3

首先,你称之为“不同的应用程序”是什么?他们会在同一浏览器中运行吗?他们会部署在同一台服务器上吗?

如果您的应用程序不共享公共EventBus,则不能使用EventBus进行通信。

如果您的应用程序在相同的选项卡中运行,您可以将EventBus存储在一个静态变量中,并从同一选项卡中的其他应用程序中检索它。

如果您的应用程序运行在同一浏览器中(在不同的选项卡上),则可以使用LocalStorage进行通信。你可以看看:

GWT在com.google.gwt.storage.client.Storage中提供了LocalStorage(和SessionStorage)的实现。

如果它们不在同一个浏览器中运行,则必须执行往返服务器以从一个应用程序到另一个应用程序进行通信(使用RPC发送消息,并使用RPC轮询来检查新的消息 - 或使用服务器推送技术,请参见GWTEventServiceServerPushFAQ)。

如果它们未部署在同一台服务器上,则必须往返服务器并在服务器之间进行通信(使用套接字,RPC,Web服务...)。

相关问题