C# 基于时间配额关闭信号机连接

C# 基于时间配额关闭信号机连接,c#,asp.net-core,signalr,background-process,signalr-hub,C#,Asp.net Core,Signalr,Background Process,Signalr Hub,我需要为信号器连接设置一个计时器,以避免每个客户端使用超过其时间配额,并关闭连接。我该怎么办?我可以使用信号器配置,还是必须在主机中设置后台服务? 我已经用json令牌设置了身份验证,所以问题不在这里。问题是,我需要一个计时器类,它保持运行并及时触发断开方法。我怎样才能做到这一点呢?您必须跟踪用户到该配额的时间,这在数据库表中可能是最好的。您可以在cookie中或在客户端执行此操作,但这是有风险的,因为它们可能会被修改,或者如果它们从多个客户端连接(例如电话和pc) 当用户尝试连接时,您应该根据

我需要为信号器连接设置一个计时器,以避免每个客户端使用超过其时间配额,并关闭连接。我该怎么办?我可以使用信号器配置,还是必须在主机中设置后台服务?
我已经用json令牌设置了身份验证,所以问题不在这里。问题是,我需要一个计时器类,它保持运行并及时触发断开方法。我怎样才能做到这一点呢?

您必须跟踪用户到该配额的时间,这在数据库表中可能是最好的。您可以在cookie中或在客户端执行此操作,但这是有风险的,因为它们可能会被修改,或者如果它们从多个客户端连接(例如电话和pc)

当用户尝试连接时,您应该根据其配额检查当前时间,以及他们是否还有剩余时间

您可以在客户端中调用一个方法,通知他们超时,并让客户端断开连接


在服务器端,您可以做的是始终将用户推送到组中,当客户机处于配额时,将他们从他们通常所在的组中删除,以接收数据并将他们推送到一个称为“outoftime”的组中。该组从未收到任何内容。您可以在OnConnect()方法中执行此操作。

它不像从服务器端关闭信号器连接那么简单(这似乎无论如何都不可能),因为客户端可以简单地重新连接并获得一个新的连接id。您可以在客户端中内置一些东西,或者在signalr上使用身份验证/标识。@huysentruitw我已经用json令牌设置了身份验证,所以问题不在这里。我需要一个定时器类,这是保持运行和触发断开方法的时间。我该怎么做呢?你不能从服务器端断开套接字连接,据我所知,没有办法断开,但你可以告诉客户端断开连接或将其分组,并在超时后将其从组中删除。Frank M的回答部分描述了这一点。我已经使用json令牌设置了身份验证,所以问题不在这里。我需要一个定时器类,这是保持运行和触发断开方法的时间。我该怎么做呢?正如huysentruitw所说,您不能在服务器端触发断开连接。您可以调用一个方法来告诉客户端断开连接。你需要一种方法来知道一个人还有多少时间,什么时候可以保持联系,什么时候应该让他们断开连接。