Я бы хотел задать несколько вопросов по оптимизации сокета Linux.Я пытаюсь сделать многопоточный loadbalancer, используя boost и простой сокет linux.Loadbalancer работает так же просто, как эти шаги:
- Запрос приходит, и слушатель tcp примет сокет, просто произнесите его clientSocket и создайте новый поток
- Когда поток запускается, он создаст внутренний сокет, просто произнесите его serverSocket для внутреннего сервера (службы)
- После того как serverSocket установлен,Я создаю новый поток для чтения из serverSocket и отправляю данные / ответ на clientSocket
- А для основного потока я вызываю функцию, которая будет читать из clientSocket и отправить на serverSocket
- Когда один из этих двух сокетов станет недействительным, рабочий закроет оба сокета и умрет
Я такжеиспользуйте Waitset из библиотеки ting, которая использует epoll, чтобы сделать метод recv в режиме блокировки, чтобы он ожидал, пока не произошло событие, а затем считал данные из сокета.
Проблема в том, что япроверил лoadbalancer с AB, -n 10000 -c 100 -k, результат очень разочаровывает.Я получил только ~ 1600 тпс.Я пытался записать время запроса для каждого запроса, но результат был хорошим.Каждое путешествие туда и обратно получало <1000 микросек / 1 милисек.</p>
Но когда я регистрирую интервалы входящего запроса, следующий запрос обрабатывается около> 5000 микросек / 5 миллисекунд от текущего полученного запроса.Может быть, кто-нибудь может предложить лучшее решение для оптимизации работы сокета здесь?Спасибо.