asp.net mvc 需要 signalR 轮询

need signalR polling for asp.net mvc

任何善良的人都可以指导我如何在现有的 mvc 项目上使用 signalR 来实时轮询数据,我将不胜感激。 示例代码:

[控制器]

private ApplicationDbContext db = new ApplicationDbContext();
public PartialViewResult Chat(string people) // <---need to send real time data to partial
    {
            var model = new MessageVM()
            {      
                sender = User.Identity.Name;,              
                messageList = db.messages.Where(x => x.receiver == people).ToList().Take(30)
            };
            return PartialView("_chat", model);
    }

[查看]

@Ajax.ActionLink(item.name, "Chat", new { people = item.name }, new AjaxOptions() 
{ HttpMethod = "GET", UpdateTargetId = "divChat", InsertionMode = InsertionMode.Replace })

<div id="divChat"></div>  // <---this area need real-time messages data from controller.

首先在客户端的 js 中创建信号器连接。类似于:

    function signalrconnection() {

    $.connection.hub.url = "http://localhost:54321/signalr";
    chat = $.connection.myHub;


    if (chat != undefined) {
        $.connection.hub.start()
        .done(function () {
            chat.server.send("client", "Status\tasking for status");
            chat = $.connection.myHub;
        })
        .fail(function () { NoLTConnectionAlert(); });
    }
    else {
           ///do something.
        }
    }

    return chat;
}

然后在你的 js 中添加对你的 $(document).ready(function ()) 的信号器调用,例如:

    $(document).ready(function () {

    chat = signalrconnection();
    intervalstatus = setInterval(checkstatus, 1000);

    // Create a function that the hub can call to broadcast messages.
    chat.client.addMessage = function (name, message) {}
}

在您的控制器中,您应该有一个 class 用于集线器和内部方法,例如:

     public class MyHub : Hub
    {
        public void Send(string name, string message)
        {
          Clients.Caller.addMessage("parameter", reply);
        }
    }

然后你应该在你的 js 中处理 Clients.Caller.addMessage 来更新 <div id="divChat"></div>