LINUX.ORG.RU

long poll и лимит открытых сокетов. Как?

 , , , ,


0

1

Добрый день.

Подскажите, пожалуйста, как обслуживать большое количество лонг-пул запросов не сталкиваясь при этом с проблемой кончающихся пайпов (на сокеты)?

Реализация сервера на Qt, QWebServer, QTcpSocket, QThreadPool, каждый обработчик в отдельном треде, тредов, допустим, пять. Каждый лонгпулл запрос обрабатывается в дополнительном потоке (получает дескриптор сокета из обработчика, затем сам отправляет ответ клиенту).

★★

Последнее исправление: Klymedy (всего исправлений: 1)

Закрывать неиспользуемые сокеты не пробовали? Если вам не хватает 10-20к дескрипторов и вы работаете не в гугле, то возможно где-то есть утечка дескрипторов.

Можно поднять допустимое количество открытых дескрипторов через ulimit и sysctl file-max.

http://serverfault.com/questions/48717/practical-maximum-open-file-descriptor...

Vinick ★★
()

А сколько всего потоков получается?

Стандартный event dispatcher в Qt на каждый поток использует по два дескриптора. Если потоков получается много, то варианта два: а) использовать свой event dispatcher (с eventfd вместо pipe/socketpair), б) постараться не плодить лишние потоки

sjinks ★★★
()
Ответ на: комментарий от Vinick

При закрытии сокета разрывается соединение.

Если его просто удалять, disconnectFromHost вызываться не будет?

Y ★★
() автор топика
Ответ на: комментарий от sjinks

О. Вероятно, проблема в этом. Благодарю.

Как раз планировали сделать обработку смежных запросов в одном потоке.

Y ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.