Книга: Программирование на языке Ruby
18.1.2. Реализация многопоточного сервера
18.1.2. Реализация многопоточного сервера
Некоторые серверы должны обслуживать очень интенсивный поток запросов. В таком случае эффективнее обрабатывать каждый запрос в отдельном потоке.
Ниже показана реализация сервера текущего времени, с которым мы познакомились в предыдущем разделе. Он работает по протоколу TCP и создает новый поток для каждого запроса.
require "socket"
PORT = 12321
server = TCPServer.new(PORT)
while (session = server.accept)
Thread.new(session) do |my_session|
my_session.puts Time.new
my_session.close
end
end
Многопоточность позволяет достичь высокого параллелизма. Вызывать метод join
не нужно, поскольку сервер исполняет бесконечный цикл, пока его не остановят вручную.
Код клиента, конечно, остался тем же самым. С точки зрения клиента, поведение сервера не изменилось (разве что он стал более надежным).
- 9.4.1. Реализация графа в виде матрицы смежности
- Запуск InterBase-сервера
- Расширенная установка InterBase-сервера
- Статистика InterBase-сервера
- Минимальный состав сервера InterBase SuperServer
- Отличительные особенности сервера Yaffil
- Использование сервера Yaffil внутри процесса
- Одновременный запуск нескольких копий сервера (multi-instancing)
- Мониторинг состояния сервера
- Реализация языка SQL
- 9.2. Работа прокси-сервера
- Листинг 15.11. Код для загрузки файла с Web-сервера