没有打开端口的红宝石网络服务器

没有打开端口的红宝石网络服务器

问题描述:

我正在寻找基于ruby的网络服务器通过管道而不是通过TCP/IP进行通信的可能性。所以我会通过管道发送HTTP请求,我想通过管道读取响应。它应该用作桌面应用程序的捆绑/内部网络服务器(RPC或其他)。当我的应用程序的更多实例在同一台机器上运行时,我不想处理端口配置。没有打开端口的红宝石网络服务器

任何想法?

预先感谢您。

尝试使用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 

不是你的问题的答案。但是,如果最终不得不使用TCP/IP HTTP Server,则应确保它仅在127.0.0.1上进行侦听。监听本地主机地址应该非常快,因为它不会触及网络,并且还会阻止人们从外部进行连接,从而使其更加安全。

Pipe是用于单向通信的,所以你无法在其上设置网络服务器。您可以尝试使用unix套接字。但最简单的解决方案是使用回送(127.0.0.1)。它的高度优化,所以速度不会成为问题。

Thin支持unix套接字。