没有打开端口的红宝石网络服务器
问题描述:
我正在寻找基于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套接字。