可以使用事件总线在不同项目或应用程序之间进行通信

时间:2012-11-29 12:40:51

标签: gwt event-bus

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

2 个答案:

答案 0 :(得分:3)

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

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

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

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

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

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

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

答案 1 :(得分:0)

RabbitMQ救援......这是针对此类问题的规范解决方案。

http://www.rabbitmq.com/

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

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