SignalR组重新连接

时间:2017-08-18 03:59:29

标签: .net signalr signalr-hub signalr-2

我们使用SignalR实现了一个游戏,它有几个玩家并加入了一个团队。但是,有些玩家可能会突然离线,我们想要启动机器人来替换左边的玩家。我们当前的问题是当我们让一名球员下线时,但是比赛似乎停留在那里。有没有办法重新加入剩余的玩家和已启动的机器人并继续游戏?谢谢。

1 个答案:

答案 0 :(得分:0)

如果我正确理解您的问题,您就拥有了一个多人游戏,每个用户都使用SignalR连接。您有玩家离线,您可以通过OnDisconnect事件在服务器上知道,并且您想要用您自己的僵尸玩家替换这些玩家。

我假设每个玩家都有一个唯一的ID。这个唯一的Id NEEDS与connectionId映射,以便能够实现精确替换。 uniqueId也可以是connectionId本身。

对于您的问题解决方案,您需要:

  • 找出哪个uniqueId / connectionId已脱机。
  • 从另一个客户端创建与Hub服务器的新连接,该客户端将是您的机器人播放器。
  • 使用您的有效机器人播放器的uniqueId / connectionId替换播放器的uniqueId / connectionId(脱机的人)。
  • 将状态从离线播放器传输到机器人播放器。

但是,在断开连接超时之前,您的播放器可能不会响应,默认情况下为30秒。如果您想快速了解播放器是否已脱机,请减少DisconnectTimeout。

注意:在继续之前,请检查减少超时对应用程序的性能影响。