9

我有一个项目,我现在已经用 BreezeJS 建立了一个项目。不知道 BreezeJS 内部发生了什么,但只是接受了它的工作原理,我基本上通过这个简单的命令将我的项目显示在屏幕上。

export function getProjects(projectsObservable, errorObservable)
{
return breeze.EntityQuery.from("Projects")
       .using(manager).execute()...then/fail.
}

我现在想让它对使用 signalR 编辑相同项目的用户做出响应。这意味着我此时在 javascript 结束时触发了回调,说 guid = xxxxxxx 的对象已更改(guid 是关键)。

我如何在不再次查询服务器的情况下利用 Breeze 更新项目,也不将其视为需要发送回服务器的更新。请记住,我刚刚从信号 r 获得了更新。

我是否应该首先采取另一条路径,如果我可以在一开始就从 signalR 集线器返回数据,是否有理由创建 WebApi?用 Breeze 而不是 WebApi 设置它会很容易吗?

4

2 回答 2

14

我们 IdeaBlade 期待为使用 SignalR 的 Breeze 应用程序提供良好的指导。

我目前的想法是 SignalR 适合通知客户感兴趣的数据的更改,但我不会使用 SignalR 将更改的数据传递给客户端。我让客户端决定是否(或不......或何时)从服务器获取更改的数据。

我的推理基于这样一种观点,即 SignalR 应该是一种快速、轻量级的通知机制,而不是向可能或可能尚未准备好(或愿意)应对大量变化的订阅客户喷射大量数据的消防水带数据强加给他们。

也许您可以详细说明为什么您的想法不同。我当然愿意接受另一种观点。

于 2013-04-17T06:28:19.437 回答
4

我完全同意沃德贝尔

如果您想知道如何做到这一点:例如在 Angular 应用程序中,您可以像这样订阅微风实体跟踪机制

在此处输入图像描述

然后您可以在其他地方设置一个SignlarR Hub,将这些更改传输给所有客户端

然而,由于微风.js 的强大功能, 我不推荐它,因为正如 Ward 指出的那样:“这将是向订阅客户端喷射大量数据的消防水带”。想一想,考虑一下您的应用程序将有 30 个并发用户进行交易,想象一下将创建的所有网络流量。那将是糟糕的软件架构。

您可能考虑这样做的唯一原因是,如果您需要更新从实时数据提供的仪表板,但您仍然需要更加简洁、注意、了解、了解数据流量和服务器利用率。

    function setupEventForHasChangesChanged() {
        EntityManager.hasChangesChanged.subscribe(function (eventArgs) {
            $rootScope.$emit('dataservice.hasChangesChanged', eventArgs);
        });
    }

    function setupEventForEntitiesChanged() {
        EntityManager.entityChanged.subscribe(function (changeArgs) {
            if (changeArgs.entityAction === breeze.EntityAction.PropertyChange) {
                $rootScope.$emit('dataservice.entitiesChanged', changeArgs);
            }
        });
    }
于 2014-08-04T16:47:53.753 回答