На самом деле нет необходимости писать специальный Диспетчер сеансов , чтобы сделать это, поскольку вы можете использовать пул соединений, чтобы легко обрабатывать это поведение для вас.
Что вам сначала нужнодля этого нужно определить пул соединений с максимальным количеством доступных соединений, которое в вашем случае будет 5 .Затем вы хотите настроить пул соединений так, чтобы у него был тайм-аут ожидания с чем-то разумным.Просто поймите, что этот тайм-аут может быть проблематичным в сценарии атаки типа «отказ в обслуживании», поэтому используйте его на свой страх и риск.
С правильно настроенным пулом соединений, если первые 5 выполняют какую-то длительную задачу, которая занимает несколькосекунд, и приходит шестой запрос, он будет ожидать получения соединения с базой данных из пула, прежде чем продолжить, поэтому в любой момент времени с вашей базой данных будет только 5 одновременных соединений.