Я знаю, что термин «Балансировка нагрузки» может быть очень широким, но предмет, который я пытаюсь объяснить, более конкретен, и я не знаю правильной терминологии.То, что я создаю, представляет собой набор приложений сервера / клиента.Сервер должен иметь возможность обрабатывать огромные объемы передачи данных, а также клиентских подключений, поэтому я начал изучать многопоточность.
В сущности, я вижу три способа реализации любого вида потоков длясервер ...
- Один поток обрабатывает все запросы (игнорирует назначение потока, если в нем зарегистрировано 500 клиентов)
- Один поток на пользователя (что рискованно создавать 1 потокдля каждого из 500 клиентов)
- Пул потоков, которые делят работу поровну для любого количества клиентов (что я ищу)
Третий - это то, что я хотел бынравится знать.Он состоит из такой настройки:
- Максимум 250 потоков, работающих одновременно
- 500 клиентов не будут создавать 500 потоков, но будут использовать 250
- Очередьзапросы ожидают передачи в поток
- Поток не привязан к клиенту, и наоборот
- Сервер решает, в какой поток отправить запрос, основываясь на активности (loadбаланс)
В настоящее время я пока не ищу какой-либо код, но информацию о том, как работает такая установка, и желательно учебник для достижения этой цели в Delphi (XE2).Даже подходящего слова или имени для этой темы было бы достаточно, чтобы я мог самостоятельно выполнить поиск.
РЕДАКТИРОВАТЬ
Я счел необходимым объяснить немного одля чего это будет использоваться.Я буду транслировать как команды, так и изображения, будет установка с двумя сокетами, где есть один «Главный сокет команды» и другой «Дополнительный сокет потокового изображения».Поэтому на самом деле одно соединение - это 2 сокетных соединения.
Каждое соединение с главным сокетом сервера создает (или повторно использует) объект, представляющий все данные, необходимые для этого соединения, включая потоки, изображения, настройки и т. Д.каждое соединение с основным сокетом, потоковый сокет также подключен.Это не всегда потоковые изображения, но командный сокет всегда готов.
Дело в том, что у меня уже есть механизм потоков в моей текущей настройке (1 поток на объект сеанса), и я хотел бы перенести это нав многопоточную среду, похожую на пул.Два соединения вместе требуют более высокого уровня контроля над этими потоками, и я не могу полагаться на что-то вроде Indy, чтобы сохранить их синхронизацию, я бы лучше знал, как все работает, чем научиться доверять чему-то другому, чтобы выполнить работу дляя.