信令 - 用于发送消息的替代方法

本文关键字:方法 消息 用于 信令 | 更新日期: 2023-09-27 17:55:14

我在 Signalr 中实现了 PersistentConnection 类。 对于我们的网站,我需要能够广播一条消息,然后让每个连接确定该特定消息是否与该特定用户相关,然后再将其发送到浏览器。

像这样:

public class MyConnection : PersistentConnection {
    private int _UserID;
    public override void OnSending(object message) {
        var msg = message as MyNotification;
        if(msg != null && !msg.CanRead(_UserID))
            return;
        base.OnSending(message);
    }
}

这可能吗?

现在,我们有一个自定义会话状态对象。 连接后,ID 将添加到用户会话对象中。 当我们有消息要发送时,我们会引发一个事件,每个会话确定是否将消息传递到其关联的客户端 ID。 我真的很想将其与我们的会话对象分离。

信令 - 用于发送消息的替代方法

可以创建中心管道模块来获取此影响。

例如,您可以执行以下操作:

public class MyModule : HubPipelineModule
{
    protected override bool OnBeforeOutgoing(IHubOutgoingInvokerContext context)
    {
        return context.Connection.ShouldSend();
    }
}

然后在您的Application_Start中:

GlobalHost.HubPipeline.AddModule(new MyModule());

当然,您需要将 ShouldSend 方法添加到 IConnection 接口和相应的连接对象,但这会为您提供所需的结果。

有关中心管道

模块的详细信息,请参阅 http://weblogs.asp.net/davidfowler/archive/2012/11/11/microsoft-asp-net-signalr.aspx 中的中心管道部分