微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SignalR Core .NET客户端架构问题

如何解决SignalR Core .NET客户端架构问题

希望能就我面临的问题获得一些反馈。我首先遇到这个问题的事实使我觉得我错过了某件事或正在以一种非常奇怪的方式做某事。

上下文: 所以我有3个申请。

网站-使用的主要SaaS网站。此前端上的任何操作都会向服务器发送API请求 API /集线器服务器-在这种情况下的主服务器。具有网站用来发送请求的API和客户端连接到的集线器。在这里,我使用IUserIdProvider将SignalR连接ID映射到内部用户ID。这是使用Redis背板配置的。 客户端-ElectronNET应用程序(Blazor服务器端),它将执行通过SignalR推送到集线器的简单操作,并从集线器接收有效负载。在此应用程序中,我还使用fluxor有效地管理状态。

用户ID和连接ID映射 从网站>服务器发送API时,HttpContext有一个AuthToken,它将我映射到内部UserId。然后将此UserId映射到SignalR ConnectionId以确保将请求发送到正确位置的最佳方法是什么?

当前,当客户端连接到SignalR集线器时,我将其作为一组ConnectionId(以UserId为键)添加到Redis,然后将任何操作发送给给定UserId的该集合内的所有ConnectionId。我不确定这是否是最好的方法吗?

依赖注入 因此,在我的客户端应用程序中,大多数事情都注册为单例,因为它是客户端应用程序,因此并不需要将所有内容都作为瞬态/作用域生存期。 该应用的工作流程为:

  • 应用程序加载>用户登录>建立与服务器的连接
  • 用户执行IService /实施中处理的各种操作
  • Hub发送消息,然后使用HubConnection.On(“ blabla”)进行设置,然后传递给IService / Implementations以执行所需的操作-此时是所有标准内容

但是,现在我正在实现fluxor来管理状态,并且已将其注册为范围服务-但是我的IConnectionManagementService(HubConnection所在的位置)是单例;因为我需要从几个不同的地方与之进行交互,并且我想确保与客户端之间只有1个连接。

我该如何实现呢?!我确信我在这里做错了,甚至不得不尝试解决这样的问题。当应用启动时,我基本上想实例化我的HubConnection。但是当某些活动发生时,我想移交给fluxor的Idispatcher来触发reducer。

客户端生命周期事件管理 因此-在服务器上的集线器中,存在OnConnected和Ondisconnected的替代-这些客户端对应什么?我可以看到Ondisconnected的事件,但看不到OnConnected的任何事件。我要在这里做的事情很简单:

OnConnected触发一个Idispatcher.dispatch(new ConnectedAction()); Ondisconnected触发Idispatcher.dispatch(new disconnectedAction());

是否完全不需要OnConnected,因为我可以依靠await HubConnection.ConnectAsync()然后触发连接操作? (假设没有错误) 这似乎是在没有OnConnect事件时可以轻松实现的唯一方法

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。