Android 禁用ARR的Azure应用程序服务上的信号器

Android 禁用ARR的Azure应用程序服务上的信号器,android,azure,redis,signalr,Android,Azure,Redis,Signalr,我们的服务器每天在特定的时间段内扩展1-3个实例。我们有Azure Redis背板用于信号器的连接持久性。除此之外,服务器未启用ARR关联。顺便说一下,我们将ServerSentEvents用于Androids,将WebSocket用于iOS 问题是我们的移动用户(moto信使)经常断开或重新连接到信号器服务器,因为在移动信号较低时,他们的提供商 我们已经通过手机端检查了所有的东西。我们非常确定一次只有一个信号机连接。除此之外,当它们连接时,我们还将它们的ConnectionID存储在持久存储(

我们的服务器每天在特定的时间段内扩展1-3个实例。我们有Azure Redis背板用于信号器的连接持久性。除此之外,服务器未启用ARR关联。顺便说一下,我们将ServerSentEvents用于Androids,将WebSocket用于iOS

问题是我们的移动用户(moto信使)经常断开或重新连接到信号器服务器,因为在移动信号较低时,他们的提供商

我们已经通过手机端检查了所有的东西。我们非常确定一次只有一个信号机连接。除此之外,当它们连接时,我们还将它们的ConnectionID存储在持久存储(SQL数据库)上

在向用户发送消息时,我们选择存储在数据库中的最新连接id。这意味着我们只向客户端发送了一个连接id

然而,我们得到了一些反馈,关于我们通过服务器发送的消息在他们的手机上弹出两次(大多数消息在高峰时间收到两次,而服务器有2或3个实例)

我们无法找到它为什么会被收到两次,特别是在高峰时间

问题是,这有可能是关于ARR亲和力的吗?因为Redis backplane使用订阅和发布方法,而且由于快递员频繁断开/重新连接,他们有机会连接不同的服务器,因此,当服务器发送消息时,两个服务器可能会尝试发送该消息,并且即使他们有一个连接,该消息也会在他们的手机上弹出两次

其他信息

信号器断开超时=60秒


signer KeepAlive=20秒

这似乎就是原因,当发出新的连接请求时,您可能需要使用复制从其他服务器删除现有的连接


如果复制间隔足够短,它将最大限度地减少重复的数量,对于其余部分,您可能需要在客户端解决此问题,如果已经收到通知哈希/id,则忽略最后一个通知

谢谢你的回复!是的,这将解决问题。除此之外,我想启用ARR也可以解决这个问题,但是如果启用ARR,快递员整天在线,他们的电话将只连接一台服务器。因此,如果启用ARR并向外扩展,其他实例甚至不会被使用:(除此之外,对于这个高峰时间,我没有扩展,现在也没有问题。这有点令人沮丧,因为我无法扩展我的实例。您能给我一些关于复制的详细信息吗?我想合并复制是您正在寻找的正确关键字,启用ARR并使用循环分发m。)ode应该适合你,测试是另一回事,看看这个。我希望你能解决你的问题,祝你好运:)解决这类问题的唯一真正方法是在你的消息中引入ID和ACK。这就是你保证没有重复的方法(通过让客户端检查ID).至于它发生的原因,很难知道。我不认为亲和性会影响SignalR 2.x,因为消息仍然通过后置纽厄尔,因为消息同时到达,两条消息的调用事件都会被触发。我需要为每条消息设置一个锁定/解锁。我对ARR的怀疑在于我们是否会击中everytime连接到同一实例,以便信号器每次断开/重新连接时都会连接到同一实例