2011-12-22 15 views
5

PHPでWebアプリケーションを開発した経験は数年ありますが、Webアプリケーションの開発では決して幅広くJavaを扱っています。私はPHP/CodeIgniterでビルドされ、CloudControlでホストされている過去6ヶ月間にわたり作業してきた大規模プロジェクトを完成させています(サーバーの自動プロビジョニングとスケーラビリティを提供します)。PHP開発者のWeb開発用Javaについての質問

プロジェクトはうまく行きましたが、PHPは私のニーズに応えましたが、今はエンタープライズユーザー向けのWebアプリケーションを開発する段階にあり、Java(おそらく 'Grails')の使用を検討していますAWS Elastic Beanstalkと組み合わせて使用​​します。

私の最初の質問は、マルチスレッド、Java用のWebアプリケーション開発でどのくらいの頻度で使用されていますか?私のPHPアプリケーションでは、私のサーバーは、ユーザーの要求(ユーザーの壁への投稿)に応じてfacebookへのAPI呼び出しを行う必要がありました。ユーザーに返す前にPHP呼び出しが完了するのを防ぐために、Gearmanのジョブキューイングサーバーを使用して作業をプライマリアプリケーションサーバーからバックグラウンドワーカーにオフロードしました。

Java開発者は単にAPI呼び出しを処理し、メインプロセスをユーザーに返すだけのスレッドを作成するでしょうか?これはPHPを使ったJava開発の最大の強みですか?ありがとう!

+1

私はしばらくの間、両方の言語を自分自身に与えてきました。私の非常に謙虚な意見です:Javaの強さは、APIとライブラリの可用性です。 PHPの場合は、プロトタイプまたは機能バージョンを構築する速度です。私は今、PHPExcelの代わりにApache POIを使うことができると知っていたので、私は今、私は新しいプロジェクトのためにJavaを選択しました...怠け者。 :) – Alfabravo

+1

私は新しいスレッドを生成する能力がPHP開発者(自分自身のような)にとって斬新であり、PHPが必死に欠けているこの素敵な機能を使う力を持っていることは、これと、これと、これらの事柄の "考えのタイプ - しかし惜しみなく。私は、PHPからマルチスレッドを可能にするいくつかの言語になっている開発者の話があまりにも多く聞こえました.3スレッドで合理的に実行できた100スレッドを開始した状況になって、サーバーは犬のように動作しています。 – DaveRandom

+0

私は、ユーザーがデータを利用できるようにする必要があるときにスレッドを使用しました(パフォーマンスは機能です)、すべてを集めるには、1つのスレッドで長い待ち時間が必要です。私はそれが有用であることを証明する他の多くのケースがあると確信していますが、何かを構築するときに銀色の弾丸または最初の考えではありません。 – Alfabravo

答えて

2

Java開発者は単にAPIコールを処理してメインプロセスをユーザーに返すだけのスレッドを作成するでしょうか?

によって異なります。

これを行うと元のスレッドはもう少し何かできますが、イベントベースに設計されていなければ、最終的にセカンダリスレッドが終了するまで待つ必要があります。あなたが始めた場所に戻る。 (実際にあなたがオフに悪化している...あなたは今待っている2つのスレッドを持っているので。)、古典的なJavaサーブレットを使用して実装されたWebサーバーの場合は


、各ユーザの要求は独自のスレッドで実行されます。簡単なアプローチは、リクエストスレッドでAPIコールを実行することです。これによりスレッドはブロックされますが、この間に他のスレッドが他の要求を処理する可能性があります。 Webコンテナのスレッドプールに十分なスレッドがあると仮定すると、これは正常に動作しますが、スレッドスタック上で多くのリソース(メモリ)を使用することになります。

最新のバージョンのJavaサーブレット仕様では、非同期処理のサポートが追加されました。私は詳細をスピードアップするつもりはありませんが、これは理論的には、リクエストからリクエストスレッドを切断することができますが、後者は長い時間がかかっていました。しかし、私はこれが役に立つとは確信していません...クライアント側のAPIを実装していない限り、同じ数のJavaスレッドを同時に使用して複数の同時要求を並行して実行することはできません。

おそらく他の選択肢がありますが、もっと多くの作業が必要です。


私の助言は、まずは簡単な解決策に進むことです。要求スレッドでAPI呼び出しを行い、妥当な数の要求スレッドを使用するようにWebサーバーを構成します。

実際に必要なスループットを得るためにメモリを「無駄にして」しまうことができます。長期的にはそれに対処する必要があるかもしれませんが、それまでにはよりスケーラブルな選択肢についてもっと学ぶ時間があります。

+0

これで、プロセスによって生成されたスレッドは、ユーザー要求によって開始された実行スレッドが終了する前に完了する必要があります。私のPHPホストであるCloudControlでは、1箱あたり2つのプロセスしか使用できません。追加のボックスを用意する必要性を減らすために、ジョブキューイングサーバーを使用し、ジョブを待ついくつかのバックグラウンドワーカーを実行しました.API呼び出しの結果を待たなくてもメインスレッドを返すことができます –

関連する問題