是否可以在SignalR中为每个客户端创建不同的连接?持久连接

时间:2013-08-01 09:04:23

标签: javascript asp.net-mvc-4 signalr

我在UI上有多个网格,想要通过signalR进行更新。如果有一些变化,则仅更新相应的网格,其他网格将保持不变。 是否可以为不同的网格创建不同的连接,并相应地更新每个客户端。 还必须为不同的客户端维护连接ID。 那么,有没有可能找到这种情况的方法? 寻找一些解决方案或建议。

服务器侧

public class RealTimeEndPoint : PersistentConnection
{
    //Create array to maiantain connections
    static List<string> connectedUserId = new List<string>();

    //Called when the first connection is made
    protected override Task OnConnected(IRequest request, string connectionId) 
    {
        return Connection.Broadcast("Connection " + connectionId + " connected");
    }

    //Called when connection is disconnected
    protected override Task OnDisconnected(IRequest request, string connectionId)
    {
        connectedUserId.Remove(connectionId + ":" + request.User.Identity.Name);
        return Connection.Broadcast("Connection " + connectionId + " disconncted");
    }

    //Sends a value to specified signal
    protected override Task OnReceived(IRequest request, string connectionId, string data)
    {
        connectedUserId.Add(connectionId + ":" + request.User.Identity.Name);
        return Connection.Send(connectionId, "Connection " + connectionId + " sent " + data);
    }
}

客户机侧

myGrid1.on('rowcollapse', function (event) {
            GridConnection.stop();
        });

        myGrid1.on('rowexpand', function (event) {
            var row = event.args.rowindex;
            var value = myGrid1.jqxGrid('getcellvalue', row, "Name");                
            GridConnection.start().done(function () {
                GridConnection.send("P" + value);
            });

我需要的是扩展启动连接并通过signalR更新数据,而在崩溃后它应该断开连接。 nymber的网格不止一个。希望这有助于澄清我的观点。

1 个答案:

答案 0 :(得分:0)

您可以将我的lib用于此名为

SignalR.EventAggregatorProxy

使用nuget安装

Install-Package SignalR.EventAggregatorProxy

它为您提供了Hub和连接细节,因此您只需订阅和发布活动

检查wiki以了解如何设置它 https://github.com/AndersMalmgren/SignalR.EventAggregatorProxy/wiki

一旦设置完所有你需要todo来听javascript的后端事件是

ViewModel = function() {
   signalR.eventAggregator.subscribe(MyApp.Events.TestEvent, this.onTestEvent, this);
};

您可以只在一个连接和一个集线器上收听您想要的事件数量