2009-02-23 2 views
0

Я ищу возможность иметь рубиновый веб-сервер, обменивающийся по трубе, а не TCP/IP. Поэтому я отправлю HTTP-запрос по каналу, и я хочу прочитать ответ по каналу. Он должен использоваться как встроенный/внутренний веб-сервер (RPC или что-то еще) для настольных приложений. Я не хочу обрабатывать конфигурацию портов, когда будет больше экземпляров моего приложения, работающего на одном компьютере.Ruby webserver без открытого порта

Любые идеи?

Заранее спасибо.

ответ

2

Попробуйте использовать UNIXSocket Вы используете локальный путь, чтобы указать, где находится соединение сокета, не порт, и вы можете легко обрабатывать несколько одновременных подключений.

# server.rb 
require 'socket' 
File.delete(filename) if File.exists? filename 
server = UNIXServer.open(filename) 
server.listen(queuesize) 

puts "waiting on client connection" 
while client= server.accept 
    puts "got client connection #{client.inspect}" 

    child_pid = fork do 
    puts "Asking the client what they want" 
    client.puts "Welcome to your server, what can I get for you?" 
    until client.eof? 
     line = client.gets 
     puts "The client wants #{line.chomp.inspect}" 
    end 
    client.close 
    end 

    puts "running server (#{child_pid})" 
    client.close 
    Process.detach(child_pid) 
end 

server.close 


# client.rb 
require 'socket' 
puts "requesting server connection" 
server = UNIXSocket.new(filename) 
puts "got server connection #{server}" 
line = server.gets 
puts "The server said: #{line.chomp.inspect}" 
%w{ a-pony a-puppy a-kitten a-million-dollars }.each do |item| 
    server.puts item 
end 
server.close 
0

Не ответ на ваш вопрос. Однако, если вам нужно использовать HTTP-сервер TCP/IP, вы должны убедиться, что он прослушивает только 127.0.0.1. Прослушивание локального адреса хоста должно быть довольно быстрым, так как оно не попадет в сеть, а также сделает его более безопасным, чтобы остановить людей, подключающихся извне.

1

Труба для односторонней связи, поэтому вы не можете настроить на этом веб-сервер. Вы можете попробовать с помощью unix-сокета. Но самым простым решением является использование loopback (127.0.0.1). Он сильно оптимизирован, поэтому скорость не будет проблемой.

Смежные вопросы