Книга: Программирование на языке 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 не нужно, поскольку сервер исполняет бесконечный цикл, пока его не остановят вручную.

Код клиента, конечно, остался тем же самым. С точки зрения клиента, поведение сервера не изменилось (разве что он стал более надежным).

Оглавление книги


Генерация: 1.231. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз