使用.NET MVC4的实用实时应用程序的最佳实践

时间:2012-05-23 08:48:30

标签: javascript ajax asp.net-mvc jsonp real-time

Hello people and bot,

我正在为系统开发前端Web应用程序,但遇到了一些问题。

整个应用程序必须位于一个页面上,这意味着在应用程序的主要区域流动期间不会刷新或更改页面。

它还必须适用于所有网络浏览器,包括IE7,并可部署为平板电脑和手机的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可以带来什么样的安全问题。

感谢所有帮助!

1 个答案:

答案 0 :(得分:3)

您可以查看SignalR。 Scott Hanselman也blogged就此发表了看法。