首页 > 学院 > 开发设计 > 正文

ruby实现的一个异步文件下载HttpServer实例

2019-10-26 19:23:18
字体:
来源:转载
供稿:网友

1.使用ruby eventmachine和em-http-server gem,完成一个简单的提供文件下载功能的HttpServer

2.使用了EM的FileStreamer来异步发送文件,发送文件时先组装了header,然后调用FileStreamer

require 'rubygems'require 'eventmachine'require 'em-http-server'class HTTPHandler < EM::HttpServer::Server attr_accessor :filename, :filesize, :path def process_http_request #send file async if @http_request_method.to_s =~ /GET/ && @http_request_uri.to_s.end_with?(filename)  send_data "HTTP/1.1 200 OK/n"  send_data "Server: XiaoMi/n"  send_data "Connection: Keep-Alive/n"  send_data "Keep-Alive: timeout=15/n"  send_data "Content-Type: application/octet-stream/n"  send_data "Content-Disposition: filename='#{filename}'/n"  send_data "Content-Length: #{filesize}/n"  send_data "/n"  streamer = EventMachine::FileStreamer.new(self, path)  streamer.callback {  # file was sent successfully  close_connection_after_writing  } else  response = EM::DelegatedHttpResponse.new(self)  response.status = 200  response.content_type 'text/html'  response.content = "Package HttpServer<br>usage: wget http://host:port/#{filename}"  response.send_response end endendEM::run do path = '/tmp/aaa.tar.gz' EM::start_server("0.0.0.0", 8080, HTTPHandler) do |conn| conn.filename = File.basename(path) conn.filesize = File.size(path) conn.path = path endend

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表