9

私は現在、BreezeJS でセットアップしたプロジェクトを持っています。BreezeJS 内で何が起こっているのか完全にはわかりませんが、それが機能することを受け入れただけで、基本的にこの単純なコマンドから画面に項目が表示されます。

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

signalR で同じ項目を編集するユーザーへの応答性を高めたいと考えています。これは、この時点で、guid = xxxxxxx を持つオブジェクトが変更されたことを示すコールバックが JavaScript 側で発生していることを意味します (guid がキーです)。

サーバーに再度クエリを実行したり、サーバーに返送する必要がある更新と見なしたりせずに、アイテムを更新する Breeze を利用するにはどうすればよいでしょうか。シグナル r から更新を取得したことを思い出してください。

そもそも別の道を歩むべきだったのですが、最初に signalR ハブからデータを返すことができた場合、WebApi を作成する理由はありますか? これを WebApi の代わりに Breeze で設定するのは簡単でしょうか?

4

2 に答える 2

14

IdeaBlade では、SignalR と連携する Breeze アプリに関する適切なガイダンスを提供できることを楽しみにしています。

私の現在の考えでは、関心のあるデータの変更をクライアントに通知するには SignalR が適切ですが、変更されたデータを SignalR でクライアントに配信することはありません。変更されたデータをサーバーから取得するかどうか (またはいつ取得するか) をクライアントに決定させます。

私の推論は、SignalR は通知のための高速で軽量なメカニズムであるべきであり、膨大な量の変更に対処する準備ができている (または進んでいない) サブスクライブしているクライアントに膨大な量のデータをスプレーする消火ホースではなく、という見解に基づいています。それらに強制されたデータ。

考え方が違う理由を詳しく説明できるかもしれません。私は確かに別の視点に対してオープンです。

于 2013-04-17T06:28:19.437 に答える
4

ウォード・ベルに完全に同意する

どうやってそれを行うのか疑問に思っている場合: たとえば、Angular Application では、このような簡単なエンティティ追跡メカニズムにサブスクライブできます

ここに画像の説明を入力

次に、SignlarR ハブを別の場所にセットアップして、それらの変更をすべてのクライアントに送信できます。

ただし、breeze.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 に答える