【发布时间】:2021-08-15 15:25:18
【问题描述】:
我有一个 Singleton 服务 GameServer 跟踪访问特定页面的客人,一个 Game.razor 页面和一个 Scoped 服务 GameBridge,在它们之间。 Gamebridge 注入Game.razor,GameServer 注入Gamebridge。
GameServer 发出一个 ping 事件,由GameBridge 中继到页面。然后该页面调用Gamebridge 中的一个方法,该方法被中继到GameServer,并将LastSeen DateTime 设置为用户的DateTime.Now。
这个想法是,如果用户关闭他们的浏览器,Scoped 服务将被释放,GameServer 将不再从用户那里获得更新 ping,即用户已超时,游戏可能会被没收,游戏废弃的房间等等。
问题是即使关闭了浏览器,Game.razor 和 GameBridge 也会像一切正常一样继续运行——我可以看到这是因为丢失用户的时间值不断更新.截至目前,即使用户在 blazor 服务器端关闭浏览器,我也无法检测到用户断开连接。
【问题讨论】:
-
Blazor 服务器? stackoverflow.com/questions/59980882/…
-
是的,Blazor 服务器。该链接看起来可能是正确的轨道。我会再喝一杯咖啡,看看今晚能不能正常工作。 (这里是午夜,但我很想完成这项工作)
-
@Steve Greene,非常感谢!稍加修改,我就能够在几个浏览器上隔离几个窗口的电路。我很有信心我可以继续前进,我可以放弃所有事件和大部分方法调用。不过我有点担心——为什么
GameBridge和Game.razor仍然被实例化?我是否需要处理所有事件订阅等? -
@Bennyboy1973 我之前已经通过使用 Signalr 并覆盖集线器中的 ondisconnect 来完成此操作。然而,这是在 WASM 中,但主体是相同的。
-
谢谢大家。我没有找到很多关于此的示例,而且通常非常好的 MSDN 文档也没有帮助。希望以后有时间,我可以在这里发布一个基本的用户服务器。
标签: c# blazor blazor-server-side