使用 .NET MVC4 的实用实时应用的最佳做法

Best practice for a practical real-time app with .NET MVC4

本文关键字:最佳 应用 实时 NET MVC4 使用      更新时间:2023-09-26

大家好,机器人,

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

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

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

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

我的第一个想法是用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 会遇到什么样的安全问题。

感谢所有帮助!

你可以

看看SignalR。斯科特·汉塞尔曼(Scott Hanselman(也在博客上写了这篇文章。