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