2

我的情况是,我有一个会话,它通过一个简单的计数器获得一个由它分配的 ID。好吧,经过大量连接后,计数器将变为 500,即使可能只有 2 人连接。我想要做的是有一个计数器将数字标记为免费,以便它们可以重复使用!我不知道如何解决这个问题。我希望你们中的一个可以帮助我!

public void createSession(Socket gameClient)
{
    uint sessionID = mSessionCounter++;
    Session Session = new Session(sessionID, gameClient);
    mSessions.Add(sessionID, Session);
    CommandLine.WriteLine("Created session " + sessionID + " for " + Session.ipAddress, CommandLine.logType.sessionConnectionEvent);
    Session.Start();
}
4

1 回答 1

2

只是快速了解您可以执行此操作的人员。尽管在您的情况下可能不需要重复使用,但它可能仍然值得知道如何去做(加上这个问题的答案会很好)。

如果您需要随时检查正在使用的会话 ID,那么您需要能够跟踪它们。为此,我建议一个简单的List就可以了,所以让我们从以下内容开始:

static List<int> CurrentSessionIDs = new List<int>();

这应该是全球可访问的。为确保此列表保持干净,在检查“保持活动状态”的函数中,您可以像这样删除一个项目:

CurrentSessionIDs.Remove(sessionID);

接下来,您想使用您的列表作为例外列表来计算第一个可用的会话编号。您可以使用 Linq 执行此操作,如下所示:

//this would start at 0 for the first session number
int newSessionNumber = Enumerable.Range(0, int.MaxValue).Except(CurrentSessionIDs).First();

注意:这个用于查找第一个可用数字的可爱 Linq 语法的灵感来自这篇文章(归功于它到期的地方,等等)

于 2012-11-22T15:56:20.140 回答