【问题标题】:Use Signalr to have a facebook like notification system使用 Signalr 拥有类似 facebook 的通知系统
【发布时间】:2012-02-27 16:29:49
【问题描述】:

我想在 ASP.NET MVC 3 中实现一个类似于 facebook 的通知系统:通知被发送给特定用户,以通知他对他的一个项目进行操作。

信号器是否适合这种要求? 我如何使用 SignalR 向特定用户(该用户的所有打开的会话)发送通知?

编辑

好的,这就是我所做的

在客户端

$(function () {
// Proxy created on the fly
var chat = $.connection.chat;
var username = '@Html.ViewContext.HttpContext.User.Identity.Name';
// Declare a function on the chat hub so the server can invoke it
chat.addMessage = function (message) {
     $('#messages').append('<li>' + message + '</li>');
};
// Start the connection
$.connection.hub.start(function (){
    chat.join(username);
});

});

在服务器端

public class Chat : Hub
{
    public void Join(string username)
    {
        AddToGroup(username);
    }
}

每次我需要通知控制器中的用户时,我都会执行以下操作:

IConnectionManager connectionManager = AspNetHost.DependencyResolver.Resolve<IConnectionManager>();
dynamic clients = connectionManager.GetClients<Chat>();
clients[username].addMessage("test");

【问题讨论】:

    标签: asp.net asp.net-mvc-3 push-notification signalr


    【解决方案1】:

    是的,SignalR 是一个不错的选择。查看有关集线器的文档(serverJS client)。

    您需要实现服务器逻辑以将您的客户端会话与 SignalR 的会话相关联。您可以使用组来通知每个用户的所有打开的会话。

    【讨论】:

    • @user1236014 当用户连接时,您需要使用他的用户名/标识符将他的 SignalR 会话添加到组中。每次您需要通知用户时,您只需向他的组广播一条消息(这保证了所有打开的会话都会得到通知)。看看这个例子,它可能会对你有所帮助:blog.maartenballiauw.be/post/2011/12/06/…
    • thx nmat,我在帖子中写的解决方案工作正常。你认为它更好吗?你认为它的扩展性好吗?
    【解决方案2】:

    适合这个或者你使用轮询,这是两个选择。

    这是今天的全新视频:

    http://channel9.msdn.com/Shows/Web+Camps+TV/Damian-Edwards-and-David-Fowler-Demonstrate-SignalR?utm_source=dlvr.it&utm_medium=twitter

    【讨论】:

    • thx Adam,您认为我在帖子末尾发布的解决方案规模大吗?谢谢
    • 您的控制器应该将 IConnectionManager 作为注入到其控制器的依赖项。除了控制器工厂,您不应该在其他任何地方调用 Resolve()。使用一些 DI 容器(例如统一 - unity.mvc3 nuget 包)并使用构造函数注入注入您的控制器。确保您在 IConnectionManager 的具体实现上有一个 Dispose 方法,当您使用 HierarchicalLifetimeManager 完成时,您告诉 unity 处理它。设置断点以确保调用 dispose(仅当您正在实现 IDisposable 时)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-07
    • 1970-01-01
    相关资源
    最近更新 更多