64

注: 残念ながら、この質問は終了しましたが、他の誰かが同じ質問をした場合に備えて、この質問を維持しようとしています。

私は、モバイルデバイスと既存のWebサービスの間に位置するScalaでのサービスを開発するための優れたソリューションを探していました。

実行可能なオプションの現在のリストは次のとおりです。

おそらくそこにはもっと多くのオプションがあります。どちらを使用するかをどのように決定しますか?良いScalaミドルウェアの選択の特徴は何ですか(駄洒落を許してください;-)。TypeSafe Scalaスタックの一部であるAkkaに行きたいのですが、Finagleのようなものには豊富なライブラリのセットがあり、配管がとても簡単です。スプレーは見栄えが良く、使いやすいです。

アドバイス、洞察、経験をいただければ幸いです。そこにいる誰かが、共有しても構わないこれらのいくつかの経験を持っているに違いないと確信しています。

アップデート:

この質問が再開されることを望んでいます。この質問に対する良い答えは、新しいスケーラターが関連する落とし穴を回避するのに役立ちます。

更新2:

これらは、この質問をして以来の私自身の経験です。

Finagle-私はプロジェクトにFinagleを使用しましたが、それは堅実です。

スプレー-私の最新のプロジェクトでは、スプレーを使用していますが、非常に満足しています。最新のリリースはAkka2に基づいて構築されており、Spray-canライブラリを使用して直接実行できるため、Webサーバーが不要になります。スプレーはフレームワークではなくライブラリのセットであり、非常にモジュール化されています。Learn about Spray:REST on Akkaビデオは素晴らしい概要を提供し、Cakesolutionsのこのブログは本当に素晴らしい開発アプローチとアーキテクチャを示しています。

更新3:

人生はかなり速く動きます。たまに立ち止まって見回さないと、見逃してしまうかもしれません。-Ferris Bueller

最近では、選択が簡単になっています。私の謙虚な意見では、スプレーは戦いに勝ちました。次のAkkaHTTPになるために、Akkaに統合されています。私は現在、複数のプロジェクトでスプレーを使用していますが、これは私が今まで出会った中で最も素晴らしく、最もサポートされているソフトウェアであると正直に言うことができます。

これは最初の質問に答えるものではありませんが、少なくとも、ほとんどの場合、スプレーが最良の選択であると思われる理由をある程度示しています。非常に柔軟性があり、ブロッキングがなく、非常に安定しています。クライアント側とサーバー側の両方のライブラリと優れたテストキットがあります。また、これらの統計を見て、パフォーマンスに関するアイデアを入手してください。Webフレームワークのベンチマーク

4

2 に答える 2

2

私は個人的にずっと前にスプレーを使い始め、Scala にある他のすべてを試しました。Scala、spray、akka、shapeless、および scalaz には確かに多少の学習曲線がありますが、テクノロジーを掘り下げて実際にどのように使用するかを学び始めると、それらは理にかなっていて、特にその種の利点がすぐにわかりました。今やっている仕事について。

個人的には、両方のサーバー、残りの API、http クライアント、およびその他の必要なものを構築するためにスプレーするのに本当に耐えられるものはないと思います。私がスプレーについて気に入っているのは、彼らが akka を念頭に置いて構築されていることです。私が最初に使い始めたのは本当に初期のプロジェクトだったかもしれませんが、アーキテクチャは理にかなっています。彼らは、アクター モデルを使用し、ブロッキング操作を行わないことの利点を活用するという点で、自分たちが何をしているのかを知っていました。

俳優は慣れるまで少し時間がかかるかもしれませんが、私は好きです。以前のように強力なハードウェアを必要としないため、システムは非常にスケーラブルで安価に実行できるようになりました。さらに、スプレーにはスプレー ルーティング DSL があるため、ルールに従う限り、残りの API を作成するのは比較的簡単です。ブロックしないでください。もちろん、ブロック モデルに戻ることになるため、API またはアクターからクライアント リクエストを作成するために apache commons http クライアントにアクセスしないでください。

これまでのところ、spray、typesafe、および akka に非常に満足しています。彼らのモデルは、何かが起こってフェイルファーストのアプローチを取った場合に、自然に回復する非常に回復力のあるシステムを構築するのに役立ちます. 私がスプレーで持っている唯一の問題 (スプレーのせいではありません) は、ルーティング DSL に対する IDE のサポートです。私は絶対に Eclipse を軽蔑し、常に IDEA ユーザーでした。Scala プラグインを使い始めたときは、すべて問題ないように思えました。その後、私のルーティング DSL は自然に進化し、より大きな獣になりました。IDEA がそのコードを解析する方法についての何かが、スプレー ルーティングまたは形状のないものに遭遇するたびに、そのパンツをうんざりさせます。使用できなくなるところまで来ています (2 ~ 3 文字を入力し、制御を取り戻すまで 5 分待たなければなりません)。

そのため、spray-routing または重い shapeless コードについては、ensim、ensime-sbt、および scala-mode2 を使用して emacs を起動します。astyanax の品質を備え、よりノンブロッキングなアーキテクチャを使用して構築された Cassandra ライブラリのみを入手できた場合。

于 2014-06-24T07:08:13.377 に答える
0

ここでは、リストしたすべての代替案の簡単な説明を含む、scala リソースの優れたリストを見つけることができます。

私自身の経験から、私は Scalatra を使用しています。これは小さく、シンプルで、URI マッピングや Web サービスの呼び出しなどに効果的です。

于 2014-07-21T21:03:25.673 に答える