【问题标题】:Isolate SignalR requests隔离 SignalR 请求
【发布时间】:2015-12-17 02:28:06
【问题描述】:

我正在尝试使用 signalR 作为消息系统来更新网页上的进度条等 - 我需要能够将进度(或任何消息)隔离到特定页面。

IHubContext hubContext = GlobalHost.ConnectionManager.GetHubContext<InventoryHub>();

类似消息>> hubContext.Clients.All.InitialiseProgress(inventoryData.Count());

很明显,问题出在Clients.All - 我只是不确定如何连接它,以便当它从服务器发送回客户端时 - 它只发送到调用它的页面。我无法理解connectionid

请帮忙:-)

【问题讨论】:

  • “我只是不确定如何连接它,以便当它从服务器发送回客户端时 - 它只发送到它被调用的页面” - 我认为这意味着你已经遇到Clients.Caller 并不足以满足您的需求?
  • 听起来是对的——我只是不知道如何实现它。例如我使用 hubContext.Clients.All.InitialiseProgress(inventoryData.Count()); - 但是没有 Clients.Caller ....?

标签: asp.net-mvc-5 signalr


【解决方案1】:

您可以使用 SignalR Groups 将进度消息广播到特定页面。

来自Working with Groups in SignalR

将连接 ID 添加到组:

public class ContosoChatHub : Hub
{
    public Task JoinRoom(string roomName)
    {
        return Groups.Add(Context.ConnectionId, roomName);
    }

    public Task LeaveRoom(string roomName)
    {
        return Groups.Remove(Context.ConnectionId, roomName);
    }
}

向特定群组广播:

Clients.Group(groupName).addChatMessage(name, message);

【讨论】:

  • 太好了.. 但我想使用 Clients.Caller - 我只是不知道如何以一种让我使用它的方式实例化集线器..?
  • 我刚刚做了一些测试,我认为Clients.Caller 在集线器本身之外不可用,在您的情况下为InventoryHubGroups 是,但如果你真的反对使用组,你将不得不保留一些其他类型的页面标识符查找连接 ID。
猜你喜欢
  • 2023-03-10
  • 1970-01-01
  • 2015-06-20
  • 1970-01-01
  • 2020-04-19
  • 1970-01-01
  • 1970-01-01
  • 2010-09-08
  • 2015-03-26
相关资源
最近更新 更多