1

你好人和机器人,

我正在为系统开发前端 Web 应用程序并且遇到了一个小问题。

整个应用程序必须在一个页面上,这意味着在应用程序主要区域的流程中没有刷新或页面更改。

它还必须在包括 IE7 在内的所有 Web 浏览器中运行,并且可以部署为平板电脑和手机的 HTML5 应用程序。

它基于用户登录,由 webforms 身份验证控制,然后我需要轮询或长轮询服务器以获取更新。如果我可以对系统的每个部分进行请求,这将很简单,但是如果系统变得太大,会话阻塞就会成为一个问题,并且它也可能最终导致自身崩溃。所以我需要做的是想办法发送一个请求并从该请求构建一个响应。

我的第一个想法是使用 JSON 或 XML 构建响应模型,并让 JavaScript 管理需要更新的内容。例如,对某个主题发表了新评论,所有客户几乎都会立即看到此更新。我的想法是发送这样的东西:

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

JavaScript 然后会解析这个并将“haha”和“lol”添加到 id 为“topic1”的元素中。从理论上讲,这似乎很容易实现,但随着系统变得越来越大,它似乎不断地变得一团糟。

我的第二个想法是简单地拥有一组客户端函数,用于在 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

You may take a look at SignalR. Scott Hanselman also blogged about it.

于 2012-05-23T09:18:15.897 回答