2

rails/sinatra アプリが 1 回だけ初期化され、すべてのリクエストが同じアプリ インスタンスを共有していると断言できますか? または、新しいリクエストによって新しいアプリ インスタンスが生成されますか?

セッション、データベース ストレージ、またはサード パーティのサービスを使用せずに、カスタム クラスをインスタンス化し、アプリの有効期間中保持することは可能ですか? もしそうなら、スレッドセーフの観点からはどのような意味がありますか?

Web ベースのダウンロード マネージャーを実装する方法を理解しようとしています。現在、Ruby ベースのフレームワークを評価しています。

4

1 に答える 1

2

Rails / Sinatraアプリが一度だけ初期化され、すべてのリクエストが同じアプリインスタンスを共有していると断言できますか?または、新しいリクエストは新しいアプリインスタンスを生成しますか?

一般的ではありません。これは実際にはセットアップによって異なります。同じアプリケーションオブジェクトを再利用するサーバー(別名ラックハンドラー)を使用してプロセスでのみ実行する場合、これは機能します。アプリケーションの同じインスタンスが使用されるかどうかは、使用しているWebフレームワークによって異なります。Sinatra::Applicationたとえば、Sinatraは、Rackエンドポイントとして使用される場合、すべてのリクエストに対してアプリケーションクラスの新しいインスタンス(通常は)を作成します。

セッション、データベースストレージ、またはサードパーティのサービスを使用せずに、カスタムクラスをインスタンス化して、アプリの存続期間中に永続化することは可能ですか?もしそうなら、スレッドの安全性の観点からどのような影響がありますか?

本当にクラスを永続化したい場合は、おそらくmaglevのようなものが必要になります。ただし、カスタムクラスのインスタンスを永続化することを意味すると思います。永続化のためにデータベースを使用したくない場合(実際に使用する必要があります)、Rubyに付属しているPStoreにフォールバックできます。

于 2010-06-07T10:35:10.323 に答える