Azure 部署在云端时信号器滞后?|。网芯

Azure 部署在云端时信号器滞后?|。网芯,azure,.net-core,signalr,cloud,static-variables,Azure,.net Core,Signalr,Cloud,Static Variables,上下文:我正在开发一个类似于优步的系统,具体来说,服务器通过两种类型的用户(例如,驱动程序和客户端)之间的应用程序,通过连接到服务器的信号中心来调节数据流。必须跟踪它们与服务器的连接状态,并且该过程应尽可能即时 对于每种类型的用户(2个列表),它们的连接状态通过HashList()进行管理。每当用户连接时(OnConnected()被调用),就会向列表中添加一个条目,每当用户断开连接时(OnDisconnected()被调用),就会从列表中删除该条目 这些hashlist都是静态变量,紧随其后

上下文:我正在开发一个类似于优步的系统,具体来说,服务器通过两种类型的用户(例如,驱动程序和客户端)之间的应用程序,通过连接到服务器的信号中心来调节数据流。必须跟踪它们与服务器的连接状态,并且该过程应尽可能即时

对于每种类型的用户(2个列表),它们的连接状态通过
HashList()
进行管理。每当用户连接时(
OnConnected()
被调用),就会向列表中添加一个条目,每当用户断开连接时(
OnDisconnected()
被调用),就会从列表中删除该条目

这些
hashlist
都是静态变量,紧随其后

在我的机器上进行本地调试时,哈希列表会立即被修改,但是当在云服务上发布时(在我的例子中是Azure),这些列表需要时间(大约10~15秒)才能更新。然而,获得与服务器的有效连接只需要大约5秒钟

现在,我知道连接到服务器不可能是即时的,这取决于几个因素,其中大多数是我无法触及的,但立即(或尽可能即时)检测断开连接将解决我的问题,我该怎么办?我应该采取不同的方法吗


PS:可以在客户端立即检测断开连接,但这对我的情况没有帮助,因为我需要服务器中连接的用户数据。

我相信您正在部署自己的SignalR服务。仅将内容存储在静态变量中是不够的,因为不能保证您的请求将转发到同一服务器。要解决这个问题,您需要实现自己的背板模式,并将状态持久化到其他地方。(例如Azure Redis缓存)

更多信息:


PS:我强烈建议您使用Azure SignalR服务,而不是托管自己的服务。

我相信您正在部署自己的SignalR服务。仅将内容存储在静态变量中是不够的,因为不能保证您的请求将转发到同一服务器。要解决这个问题,您需要实现自己的背板模式,并将状态持久化到其他地方。(例如Azure Redis缓存)

更多信息:


PS:我强烈建议您使用Azure Signal服务,而不是托管自己的服务。

我支持这个答案。在开始销毁Redis实例之前,使用Redis背板进行横向扩展仅能做到这一点。不幸的是,对于Azure Redis,甚至无法看到pubsub在Redis实例上施加的负载,因此在您开始看到Signal性能严重滞后之前,您不知道事情是否偏离了轨道。关于Redis:我理解这将有助于用户连接到不同的服务器。但是在我的例子中(开发阶段,最大用户数为2或3),假设他们都连接到同一台服务器,为什么变量需要很长时间才能更新?这是静态变量的问题还是
OnDisconnected
函数的瓶颈需要时间才能调用?关于信号机服务,我肯定会尝试一下,但同样,该应用程序仍处于开发阶段,我会看看免费计划是否适合我们。我支持这个答案。在开始销毁Redis实例之前,使用Redis背板进行横向扩展仅能做到这一点。不幸的是,对于Azure Redis,甚至无法看到pubsub在Redis实例上施加的负载,因此在您开始看到Signal性能严重滞后之前,您不知道事情是否偏离了轨道。关于Redis:我理解这将有助于用户连接到不同的服务器。但是在我的例子中(开发阶段,最大用户数为2或3),假设他们都连接到同一台服务器,为什么变量需要很长时间才能更新?这是静态变量的问题还是
OnDisconnected
函数的瓶颈需要时间才能调用?关于信号机服务,我肯定会尝试一下,但同样,该应用程序仍处于开发阶段,我会看看免费计划是否适合我们。