Signalr 如何使用信号器向客户端发送消息?
我想在我的clint浏览器网站上使用signalR,以便在添加新订单时它可以从服务器接收消息。所以我希望它对任何浏览器都不会触发的服务器端事件做出反应 网站上有多个用户。当服务器上为用户下了新订单时,应通知用户。如何仅通知特定用户,并通过添加用户的方法执行此操作 是否有类似以下代码:Signalr 如何使用信号器向客户端发送消息?,signalr,Signalr,我想在我的clint浏览器网站上使用signalR,以便在添加新订单时它可以从服务器接收消息。所以我希望它对任何浏览器都不会触发的服务器端事件做出反应 网站上有多个用户。当服务器上为用户下了新订单时,应通知用户。如何仅通知特定用户,并通过添加用户的方法执行此操作 是否有类似以下代码: var chat=new Chat(); chat.Send("hihi"); 放置在AddOrder方法中,带有 public class Chat : Hub { public void Send(s
var chat=new Chat();
chat.Send("hihi");
放置在AddOrder方法中,带有
public class Chat : Hub
{
public void Send(string message)
{
// Call the addMessage method on all clients
Clients.refresh(message);
}
}
您必须为所有连接的用户存储
上下文.ConnectionId
,将其与您的网站用户绑定,然后使用客户端[ConnectionId].addMessage(数据)代码>您可以覆盖默认客户端id(用于标识用户浏览器窗口)并替换为您自己的。您的客户id将来自您的会员资格提供商
创建一个新类并实现IConnectionIdGenerator
public class UserIdClientIdFactory : IConnectionIdGenerator
{
public string GenerateConnectionId(IRequest request)
{
return Guid.NewGuid().ToString();
}
}
上面的方法只是创建一个新的Guid,但是您将从您的成员资格提供者返回客户id
然后需要向SignalR dependencyresolver注册这个新类,因此在global.asax文件的Application_Start方法中添加以下行
GlobalHost.DependencyResolver.Register(类型为(IConnectionIdGenerator)),
()=>newuseridclientidfactory())
下新订单后,您将获得特定客户并向他们广播消息,例如:
//clientId matches the user id from you membership provider.
var clients = GlobalHost.ConnectionManager.GetHubContext().Clients;
clients[clientId].yourClientSideCallBackMethodGoesHere(someValue);
一种方法是保存一组用户(网站用户),每个用户都与一个连接Id配对。然后,您可以使用Signal events OnConnected/OnDisconnected将用户弹出或弹出此列表
例如
此解决方案已被弃用。有关此问题的更多详细信息,请参见下面的问题。
public override Task OnConnected()
{
// Add users here with Context.ConnectionId
}
public override Task OnDisconnected()
{
// Remove users from collection here by identifying them with Context.ConnectionId
}