如何像通知系统一样开发堆栈溢出

时间:2014-02-17 08:16:11

标签: jquery asp.net-mvc-3 notifications signalr

堆栈在网站上有很好的通知系统。当我们发布任何问题并坚持到该页面时,如果有人给出答案或发表任何评论或编辑我的问题或其他问题,那么我们点击并加载数据时会收到通知消息。

这里是图像

enter image description here

1)这种通知可以由signalR

开发

2)我们可以编写JQuery函数,它将运行后台的每个部分并命中服务器以检查是否有任何答案是否到达问题或检查是否存在任何问题更改或检查是否有任何评论等等找到活动,然后在页面上显示一条消息,要求用户加载更改。

但我不知道堆栈溢出是如何开发此通知系统的? 所以我正在寻找最好的指导,为任何网站开发类似的通知系统。

感谢

修改

public class ChatHub : Hub
{
    public void Send(string name, string message)
    {
        Clients.All.sendMessage(name,message);
    }
}

code in global.asax
protected void Application_Start(object sender,EventArgs e)
{
    RouteTable.Routes.MapHubs();
}

client code

<script src="http://code.jquery.com/jquery-1.8.2.min.js" type="text/javascript"></script>
<script src="Scripts/jquery.signalR-1.0.1.min.js" type="text/javascript"></script>
<script src="signalr/hubs" type="text/javascript"></script>
<script type="text/javascript">
    $(function () {
        // Proxy created on the fly          
        var chat = $.connection.chatHub;

        // Get the user name and store it to prepend to messages.
        $('#displayname').val(prompt('Enter your name:', ''));

        // Declare a function on the chat hub so the server can invoke it          
        chat.client.sendMessage = function (name, message) {
            var encodedName = $('<div />').text(name).html();
            var encodedMsg = $('<div />').text(message).html();
            $('#messages').append('<li>' + encodedName + 
                ':  ' + encodedMsg + '</li>');
        };

        // Start the connection
        $.connection.hub.start().done(function () {
            $("#send").click(function () {
                // Call the chat method on the server
                chat.server.send($('#displayname').val(), $('#msg').val());
            });
        });
    });
</script>

嗨@Anders感谢您的指导,并且您让我使用您的图书馆但是当我转到该页面时,我发现没有可靠的代码,我需要将其放入我的页面。通常当我们使用signalr时,我们编写了上面的代码。单侧集线器和另一侧是客户端,但我不明白我需要编写什么来实现您的代码,我也想知道您的代码将提供更多。

所以请详细指导我。感谢

1 个答案:

答案 0 :(得分:1)

这个想法很简单,使用pub / sub将更新推送到客户端。实际上,开发这样一个功能丰富且实时的CMS需要时间。轻松入门,随时添加功能。

不要轮询,而是使用SignalR,我的问题是Stackoverflow使用某种CQRS域。在读模型存储中,您可以将更改推送到消息总线,然后将它们转发给客户端。

您可以查看signalR的事件聚合器代理,

https://github.com/AndersMalmgren/SignalR.EventAggregatorProxy/wiki

在客户端我会使用Knockout或SignalR,但请记住,如果你想让SEO工作,你也需要在服务器上呈现内容