ホームページ バックエンド開発 Python チュートリアル EventMachineを使ってHTTPサーバーにファイルダウンロード機能を追加するRuby入門

EventMachineを使ってHTTPサーバーにファイルダウンロード機能を追加するRuby入門

Mar 04, 2017 pm 04:13 PM

アイデア:

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=&#39;#{filename}&#39;\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 &#39;text/html&#39;
   response.content = "Package HttpServer<br>usage: wget http://www.php.cn/:port/#{filename}"
   response.send_response
  end
 end
 
end
 
EM::run do
 path = &#39;/tmp/aaa.tar.gz&#39;
 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 &#39;linecache&#39; native gem requires installed build tools.
   
  Please update your PATH to include build tools or download the DevKit
  from &#39;http://rubyinstaller.org/downloads&#39; and follow the instructions
  at &#39;http://github.com/oneclick/rubyinstaller/wiki/Development-Kit&#39;
ログイン後にコピー

これは下位バージョンをインストールするようです
(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 サイトの関連記事に注目してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

LinuxターミナルでPythonバージョンを表示するときに発生する権限の問題を解決する方法は? LinuxターミナルでPythonバージョンを表示するときに発生する権限の問題を解決する方法は? Apr 01, 2025 pm 05:09 PM

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

あるデータフレームの列全体を、Python内の異なる構造を持つ別のデータフレームに効率的にコピーする方法は? あるデータフレームの列全体を、Python内の異なる構造を持つ別のデータフレームに効率的にコピーする方法は? Apr 01, 2025 pm 11:15 PM

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

プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は? プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は? Apr 02, 2025 am 07:18 AM

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

uvicornは、serving_forever()なしでhttpリクエストをどのように継続的に聞いていますか? uvicornは、serving_forever()なしでhttpリクエストをどのように継続的に聞いていますか? Apr 01, 2025 pm 10:51 PM

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

文字列を介してオブジェクトを動的に作成し、Pythonでメソッドを呼び出す方法は? 文字列を介してオブジェクトを動的に作成し、Pythonでメソッドを呼び出す方法は? Apr 01, 2025 pm 11:18 PM

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

人気のあるPythonライブラリとその用途は何ですか? 人気のあるPythonライブラリとその用途は何ですか? Mar 21, 2025 pm 06:46 PM

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

中間の読書にどこでもfiddlerを使用するときにブラウザによって検出されないようにするにはどうすればよいですか? 中間の読書にどこでもfiddlerを使用するときにブラウザによって検出されないようにするにはどうすればよいですか? Apr 02, 2025 am 07:15 AM

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

See all articles