Рубиновый веб-сервер без открытого порта - PullRequest
0 голосов
/ 23 февраля 2009

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

Есть идеи?

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

Ответы [ 4 ]

2 голосов
/ 23 февраля 2009

Попробуйте 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
1 голос
/ 23 февраля 2009

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

0 голосов
/ 23 февраля 2009

Тонкая поддержка Unix сокетов.

0 голосов
/ 23 февраля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...