amerov
@amerov
Web Developer

Как правильно реализовать веб сервер с keep-alive соединениями?

Привет!

Пример сервера на Ruby:

require 'rubygems'
require 'socket'
require 'thread'

class WebServer
  LINE_TERMINATOR = "\r\n".freeze

  def initialize(host, port)
    @server = TCPServer.new(host, port)
  end

  def run
    response_body = 'Hello World!'.freeze
    response_headers = "HTTP/1.1 200 OK#{LINE_TERMINATOR}Connection: Keep-Alive#{LINE_TERMINATOR}Content-Length: #{response_body.bytesize}#{LINE_TERMINATOR}".freeze

    loop do
      Thread.new(@server.accept) do |socket|
        puts "request #{socket}"
        sleep 3
        socket.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1)
        socket.write(response_headers)
        socket.write(LINE_TERMINATOR)
        socket.write(response_body)
        # socket.close # если раскомментировать  - все ок.
      end
    end
  end
end

WebServer.new('localhost', 8888).run


установлен `sleep на 3 секунды`. если не дожидаться выполнения и рефрешить страницу, то в таком случае не доходит до выполнения `@server.accept`, если же закрывать соединение , то все ок.
  • Вопрос задан
  • 312 просмотров
Пригласить эксперта
Ответы на вопрос 1
@CAMOKPYT
EventMachine, Rack
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы