Odpalenie servera http w dowolnym procesie rubiego

Hej,
powiedzmy ze mam taki oto kod:

class Foo

  def work
    # do stuff
    res = start_server(8888)
    # do stuff
  end
end

Foo.new.work

Foo to jest jakis worker (mozliwe ze bedzie sidekiq). Moje pytanie jest takie - czego uzyc do napisania prostego servera http ktory bedzie oczekiwal tylko na jeden request i zaraz potem umieral - EventMachine czy cos jeszcze innego?

1 Like

Webrick?

1 Like

Pytanie jest czemu chcesz odpalać cały serwer HTTP, żeby obsłużyć jeden request? Po pierwsze nie będzie to zbyt wydajne, a po drugie dochodzi Ci cała gama problemów (np. co jak serwer odpali się za późno?).

Jeżeli ja bym nad tym pracował, to odpaliłbym oddzielnie pumę (lub inny serwer, który obsługuje wiele wątków) zapisywał gdzieś requesty (jakaś kolejka lub baza danych, w zależności od ich specyfiki) i w w workerze sprawdzał czy coś tam przyszło.

2 Likes

W workerze sidekiqa chcesz odpalać serwer http? Może mógłbyś opisać szerzej jaki problem rozwiązujesz? Sam pomysł takiego odpalania wydaje się co najmniej dziwny…

@radarek
Nie bedzie to sidekiq, bedzie to proces rubiego ktory co jakis czas potrzebuje dostac jakies informacje, i ze wzgledu na prostote komunikacji chce uzyc http.

@slawosz a moze raw sockets ?

http://www.tutorialspoint.com/ruby/ruby_socket_programming.htm

# Rails 5.0
require 'socket'
server = TCPServer.open(80)
client = server.accept
# ... read line until line is not empty to skip header section
client.puts "HTTP 200 OK\r\n\r\n"
client.puts "your data...."
client.close
3 Likes

Robie patcha:

# Rails 5.0.1.rc1
require 'socket'
server = TCPServer.open(80)
client = server.accept
# ... read line until line is not empty to skip header section
client.puts "HTTP 200 OK\r\n\r\n"
client.puts "Welcome to Rails. Rails is a web-application framework that includes everything needed to create database-backed web applications"
client.close
1 Like