1

こんにちは人々とボット、

システム用のフロントエンドWebアプリケーションを開発していますが、少し問題が発生しました。

アプリケーション全体を1つのページに配置する必要があります。つまり、アプリケーションの主要な領域のフロー中に更新やページの変更を行う必要はありません。

また、IE7を含むすべてのWebブラウザーで動作し、タブレットや携帯電話用のHTML5アプリケーションとして展開できる必要があります。

これは、Webフォーム認証によって規制されているユーザーのログインに基づいているため、更新のためにサーバーをポーリングまたはロングポーリングする必要があります。これは、システムの各部分に対してリクエストを実行できれば簡単ですが、システムが大きくなりすぎると、セッションブロッキングが問題になり、それ自体が投与されてしまう可能性もあります。したがって、私がする必要があるのは、1つの要求を送信し、その要求から1つの応答を作成する方法を考えることです。

私の最初のアイデアは、JSONまたはXMLを使用して応答モデルを構築し、JavaScriptに更新が必要なものを規制させることでした。たとえば、トピックに新しいコメントが作成された場合、すべてのクライアントにこの更新がほぼ瞬時に表示されます。私のアイデアは、次のようなものを送信することでした。

[
    'd':
    {
        'addComment' : [{'topicId':'topic1', 'description':'haha'}, {'topicId':'topic1', 'description':'lol'}],
        'addTopics' : ['topic2','topic708'],
    }
]

次に、JavaScriptはこれを解析し、IDが「topic1」の要素に「haha」と「lol」を追加します。理論的には達成するのは非常に簡単に思えますが、システムが大きくなるにつれて、それは常に大きな混乱に変わっているようです。

私の2番目のアイデアは、DOM内のデータを追加および削除するための一連のクライアント側関数を用意し、JSONP手法を使用してこの関数を呼び出すことでした。

var addComment = function(commentModel)
{
    var topic = document.getElementById(commentModel.topicId),
        comments = topic.getElementByClassName('comments')[0],
        comment = document.createElement('div');

    comment.innerHTML = commentModel.description;
    comments.appendChild(comment);

    updateUnreadComments();
}

応答:

(function(addComment){
    addComment({ topicId : 'topic1', description : 'haha' })
    addComment({ topicId : 'topic1', description : 'lol' })
})(addComment)

個人的には、どちらの方法も、単純なブロードキャストにすぎないため、かなり厄介な回避策だと思います。

他の誰かが同じ問題を抱えたことがあるのか​​、そして彼らがもっと創造的な解決策を思いついたのかどうか疑問に思いました。

また、JSONPでどのようなセキュリティ問題が予想されるのか知りたいです。

すべての助けに感謝します!

4

1 に答える 1

3

SignalRをご覧ください。Scott Hanselman もそれについてブログを書いています。

于 2012-05-23T09:18:15.897 に答える