Всем вечерочка бодрого. Вопрос для теоретиков ;)
Исходные данные - установленное WS-соединение с сотней клиентов
В секунду каждому клиенту отправляется от 2 до 5 (в среднем 3) пакетов с данными и должен придти в ответ пакет с результатом в течение 3 секунд
Т.к. это не HTTP-REST (или подобное), то отлавливать таймаут на ответ необходимо своими силами. Варианты реализации:
- при запросе создается таймер setTimeout() который отслеживает приход времени и срабатывает один раз во время наступления нужного момента. Итого имеем в максимуме 100 * 3 * 3 = 900 таймеров единомоментно, плюс постоянные процедуры создания/удаления таймеров по мере отправки запросов/получения ответов
- инициируется один таймер setInterval с интервальностью не более 50мс (т.е. 20 вызовов в сек), который проходит по всем "ждунам" (как выше писал около 900 в худшем варианте) и проверяет их "статус таймаута". Итого нет постоянных пересозданий, но есть риск в случае даже небольшой задержки в проходе, наслоения вызовов...
- третий вариант по сути разновидность второго с той лиш разницей, что вместо разового создания setInterval используется setTimeout - тем самым исключается наслоение циклов, но возвращается проблема постоянного пересоздания таймеров, просто в этом варианте он будет один, но "короткий"
согласен с оратором ниже, что это экономия на спичках. пили с вариант 1 с сет таймаутами. а если не даёт покоя "забивание лупа", то тут стоит вспомнить что любое tcp-based соедеинения - это экземпляр стрима, котоырй пользует луп и в хвост и в гриву, и таймаут там особой погоды не сделает