【问题标题】:Can event bus be used to communicate between different projects or applications可以使用事件总线在不同的项目或应用程序之间进行通信吗
【发布时间】:2012-11-29 12:40:50
【问题描述】:

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

【问题讨论】:

    标签: gwt event-bus


    【解决方案1】:

    首先,您所说的“不同的应用程序”是什么?它们会在同一个浏览器中运行吗?它们会部署在同一台服务器上吗?

    如果您的应用程序不共享一个共同的EventBus,则您不能使用EventBus 在您的应用程序之间进行通信。

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

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

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

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

    如果它们没有部署在同一台服务器上,您将不得不往返于服务器并在服务器之间进行通信(使用套接字、RPC、Web 服务......)。

    【讨论】:

      【解决方案2】:

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

      http://www.rabbitmq.com/

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

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

      【讨论】:

      • 很遗憾,RabbitMQ 不能在 GWT 中工作(GWT 代码实际上是用 JS 编译并在浏览器上运行,因此只有一部分 Java 类和功能可用)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-02
      • 1970-01-01
      • 2014-03-10
      • 1970-01-01
      • 1970-01-01
      • 2016-10-06
      • 2023-03-17
      相关资源
      最近更新 更多