EventMachineを使ってHTTPサーバーにファイルダウンロード機能を追加するRuby入門
アイデア:
ruby eventsmachine と em-http-server gem を使用して、ファイルのダウンロード機能を提供する単純な HttpServer を完成させます。
ファイルを送信する場合、最初にヘッダーが組み立てられ、次に EM の FileStreamer が組み立てられます。 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://www.php.cn/:port/#{filename}" response.send_response end end end EM::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 end end
PS:eventmachineのインストールエラーについて
Windowsにeventmachineをインストールすると、常にエラーが報告されます:
Building native extensions. This could take a while... ERROR: Error installing eventmachine: ERROR: Failed to build gem native extension.
または別のエラー:
Google で長い間検索した結果、2 つの解決策が見つかりました:
1.eventmachine の以前のバージョンを使用します
このプロンプトが表示され続けますが、以下の大きなエラーがあります。これはすべて C のコンパイル エラーです。オンラインでは2つの方法があります
(1)
ERROR: Error installing ruby-debug: The 'linecache' native gem requires installed build tools. Please update your PATH to include build tools or download the DevKit from 'http://rubyinstaller.org/downloads' and follow the instructions at 'http://github.com/oneclick/rubyinstaller/wiki/Development-Kit'
これは下位バージョンをインストールするようです
(2)gem install
gem install eventmachine-win32
これはベータ1.0.0をインストールするようです。
2. devkit をアップグレードします
確認したところ、上記の具体的な解決策はありませんが、考えられる問題の理由は 2 つあります:
(1) C コンパイル環境がない
(2) スペースがある
上記のエラーログを見ると、コンパイル環境に問題がある可能性があることがわかりました。それで探しました。
私の Ruby はワンクリック インストーラーを使用してインストールされました。バージョンは 1.8.6-p398 です。
rubyinstallerのアドオンページでDevKitを見つけました。
DevKit の説明を見てみましょう:
//RubyGems でクールなネイティブを構築したい場合もあります
//C ベースの拡張機能をスコークせずに作成できます。
//DevKit は誰ですか!
これが私が考えていることのようです。必要 。
エラーの理由は、eventmachine をインストールするときにビルド ツールが必要ですが、それらがシステムで利用できないことです。エラー メッセージには解決策も示されています:
(1) http://rubyinstaller.org/downloads/ に移動して、開発キット – DevKit-tdm-32-4.5.1-20101214-1400-sfx.exe をダウンロードします
(2) ) http://github.com/oneclick/rubyinstaller/wiki/Development-Kit/ に従って開発キットをインストールします
主なインストール手順は次のとおりです:
古いバージョンの開発キットが既にオリジナルのバージョンにインストールされている場合システム、削除します
ダウンロード 上記の開発キットは、ダウンロードしたファイルを指定されたディレクトリ (c:/devkit など) に解凍します。 (注: ディレクトリにはスペースを含めることはできません)
ruby dk.rb を実行し、プロンプトに従って、ruby dk.rb init と Ruby dk.rb install をそれぞれ実行して、ruby を強化します
を実行できます
eventmachine --pre
成功したかどうかをテストします。
インストール手順に従って、DevKit のインストールを完了します。これは非常に簡単です。
次に、eventmachine を再度インストールします:
gem install rdiscount –platform=ruby
eventmachine を使用して HTTP サーバーにファイルのダウンロード機能を追加する Ruby の詳細については、PHP 中国語 Web サイトの関連記事に注目してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









LinuxターミナルでPythonバージョンを表示する際の許可の問題の解決策PythonターミナルでPythonバージョンを表示しようとするとき、Pythonを入力してください...

PythonのPandasライブラリを使用する場合、異なる構造を持つ2つのデータフレーム間で列全体をコピーする方法は一般的な問題です。 2つのデータがあるとします...

10時間以内にコンピューター初心者プログラミングの基本を教える方法は?コンピューター初心者にプログラミングの知識を教えるのに10時間しかない場合、何を教えることを選びますか...

UvicornはどのようにしてHTTPリクエストを継続的に聞きますか? Uvicornは、ASGIに基づく軽量のWebサーバーです。そのコア機能の1つは、HTTPリクエストを聞いて続行することです...

Pythonでは、文字列を介してオブジェクトを動的に作成し、そのメソッドを呼び出す方法は?これは一般的なプログラミング要件です。特に構成または実行する必要がある場合は...

この記事では、numpy、pandas、matplotlib、scikit-learn、tensorflow、django、flask、and requestsなどの人気のあるPythonライブラリについて説明し、科学的コンピューティング、データ分析、視覚化、機械学習、Web開発、Hの使用について説明します。

fiddlereveryversings for the-middleの測定値を使用するときに検出されないようにする方法
