「車輪を作る」——cicada(軽量級WEBフレーム)
前言
「車輪を作るのを繰り返さない」と言われるように、今回の議論の範囲をやめる必要があるかどうかについて.
このプロジェクトを作成する主な目的はやはり自分を向上させ、有名なオープンソースプロジェクトとの差を見て、優秀なオープンソース方式を学ぶことです.
では、cicadaというプロジェクトの核心機能についてお話しします.
私は彼を高速で軽量級のWEBフレームワークと定義した.あまり依存しておらず、コアjarパッケージは30 KBしかありません.
1行のコードだけで
とくせい
重要ないくつかの特性についてお話しします.
現在のバージョンでは、主に基本的なリクエスト、応答、カスタムパラメータ、ブロッキング機能が実現されています.
機能は少ないが、五臓がそろっている.
今後の反復過程で上図機能が徐々に改善されるので、良いアイデアがあれば教えてください.https://github.com/crossoverJie/cicada/issues.
クイックスタート
HTTPサービスをすばやく起動する方法を見てみましょう.
Mavenプロジェクトを作成し、コアパッケージを導入するだけです.
上の図に示すように、起動クラスをもう1つ構成すればいいです.
ビジネスアクションの設定
もちろん、ビジネスロジックを実現する場所も必要です.
ビジネスアクション実装
また、カスタムクラスに
アプリケーションを起動してアクセス
ビジネスロジックを実行しながら、サービス側のリターンを得ることができます.
現在、デフォルトでは
サービスでは関連ログも印刷されます.
柔軟なパラメータ構成
ここで、すべての要求パラメータは
柔軟な理由:私たちはこのように要求することができます.
これにより,業務処理時に解析すれば任意の構造のデータを伝達できる.
カスタムブロッキング
ブロッキングはフレームワークの基本機能であり、ブロッキングを使用してログ記録、トランザクションコミットなどの汎用作業を実現できます.
このため、
インタフェースを実装するだけでブロック機能を記述できます.
ここでは,すべてのactionの実行時間を記録することを示す.
現在、デフォルトではactionのブロックのみが実装されており、後でカスタムブロックも追加されます.
ブロッキングアダプタ
遮断器には
したがって、
次のように、必要に応じて実現できる方法を継承する必要があります.
パフォーマンステスト
HTTPサービスフレームワークである以上、性能も自然に保証されます.
試験条件:
同じサーバでTomcatで結果を圧してみます.
Tomcatのスレッドプール構成:
私がここで要求したのはTomcatのdocディレクトリで、結果は
しかし、この比較中の変数は完全に制御されていません.TomcatはHTMLを返していますが、
しかし、
まとめ
本文は
後続の更新ではこの内容をよく検討します.
同時に、意外な
私は適当なタイミングでそれを私の生産プロジェクトに応用して、もっと多くの友达が参加して一緒にこの「車輪」をもっとよくすることを望んでいます.
プロジェクトのアドレス:https://github.com/crossoverJie/cicada
あなたのいいねと転送は最大のサポートです.
「車輪を作るのを繰り返さない」と言われるように、今回の議論の範囲をやめる必要があるかどうかについて.
このプロジェクトを作成する主な目的はやはり自分を向上させ、有名なオープンソースプロジェクトとの差を見て、優秀なオープンソース方式を学ぶことです.
では、cicadaというプロジェクトの核心機能についてお話しします.
私は彼を高速で軽量級のWEBフレームワークと定義した.あまり依存しておらず、コアjarパッケージは30 KBしかありません.
1行のコードだけで
HTTP
サービスを開始することもできます.とくせい
重要ないくつかの特性についてお話しします.
現在のバージョンでは、主に基本的なリクエスト、応答、カスタムパラメータ、ブロッキング機能が実現されています.
機能は少ないが、五臓がそろっている.
今後の反復過程で上図機能が徐々に改善されるので、良いアイデアがあれば教えてください.https://github.com/crossoverJie/cicada/issues.
クイックスタート
HTTPサービスをすばやく起動する方法を見てみましょう.
Mavenプロジェクトを作成し、コアパッケージを導入するだけです.
top.crossoverjie.opensource
cicada-core
1.0.0
上の図に示すように、起動クラスをもう1つ構成すればいいです.
public class MainStart {
public static void main(String[] args) throws InterruptedException {
CicadaServer.start(MainStart.class,"/cicada-example") ;
}
}
ビジネスアクションの設定
もちろん、ビジネスロジックを実現する場所も必要です.
cicada
は、インタフェースを実装するだけで特定の論理を実装できるインタフェースを提供する.ビジネスアクション実装
top.crossoverjie.cicada.server.action.WorkAction
インタフェースを作成します.@CicadaAction(value = "demoAction")
public class DemoAction implements WorkAction {
private static final Logger LOGGER = LoggerBuilder.getLogger(DemoAction.class) ;
private static AtomicLong index = new AtomicLong() ;
@Override
public WorkRes execute(Param paramMap) throws Exception {
String name = paramMap.getString("name");
Integer id = paramMap.getInteger("id");
LOGGER.info("name=[{}],id=[{}]" , name,id);
DemoResVO demoResVO = new DemoResVO() ;
demoResVO.setIndex(index.incrementAndGet());
WorkRes res = new WorkRes();
res.setCode(StatusEnum.SUCCESS.getCode());
res.setMessage(StatusEnum.SUCCESS.getMessage());
res.setDataBody(demoResVO) ;
return res;
}
}
また、カスタムクラスに
@CicadaAction
注記を追加する必要があり、主にルーティングを要求するときにビジネスクラスを見つけるためのvalue
を指定する必要があります.アプリケーションを起動してアクセス
http://127.0.0.1:7317/cicada-example/demoAction?name=12345&id=10
ビジネスロジックを実行しながら、サービス側のリターンを得ることができます.
現在、デフォルトでは
json
応答がサポートされており、後期にはテンプレート解析も追加されます.サービスでは関連ログも印刷されます.
柔軟なパラメータ構成
ここで、すべての要求パラメータは
Param
にカプセル化され、その中の様々なAPIを利用して要求データを取得することができる.柔軟な理由:私たちはこのように要求することができます.
http://127.0.0.1:7317/cicada-example/demoAction?jsonData="info": {
"age": 22,
"name": "zhangsan"
}
これにより,業務処理時に解析すれば任意の構造のデータを伝達できる.
カスタムブロッキング
ブロッキングはフレームワークの基本機能であり、ブロッキングを使用してログ記録、トランザクションコミットなどの汎用作業を実現できます.
このため、
cicada
には、top.crossoverjie.cicada.server.intercept.CicadaInterceptor
というインターフェースが提供される.インタフェースを実装するだけでブロック機能を記述できます.
@Interceptor(value = "executeTimeInterceptor")
public class ExecuteTimeInterceptor implements CicadaInterceptor {
private static final Logger LOGGER = LoggerBuilder.getLogger(ExecuteTimeInterceptor.class);
private Long start;
private Long end;
@Override
public void before(Param param) {
start = System.currentTimeMillis();
}
@Override
public void after(Param param) {
end = System.currentTimeMillis();
LOGGER.info("cast [{}] times", end - start);
}
}
ここでは,すべてのactionの実行時間を記録することを示す.
現在、デフォルトではactionのブロックのみが実装されており、後でカスタムブロックも追加されます.
ブロッキングアダプタ
遮断器には
before/after
の2つの方法が提供されているが,すべての方法が実現される必要はない.したがって、
cicada
にはアダプタが用意されています.top.crossoverjie.cicada.server.intercept.AbstractCicadaInterceptorAdapter
次のように、必要に応じて実現できる方法を継承する必要があります.
@Interceptor(value = "loggerInterceptor")
public class LoggerInterceptorAbstract extends AbstractCicadaInterceptorAdapter {
private static final Logger LOGGER = LoggerBuilder.getLogger(LoggerInterceptorAbstract.class) ;
@Override
public void before(Param param) {
LOGGER.info("logger param=[{}]",param.toString());
}
}
パフォーマンステスト
HTTPサービスフレームワークである以上、性能も自然に保証されます.
試験条件:
300 ;1G 、 CPU、1Mbps。
でJmeterで測定した場合は以下の通りである.同じサーバでTomcatで結果を圧してみます.
Tomcatのスレッドプール構成:
私がここで要求したのはTomcatのdocディレクトリで、結果は
cicada
の性能がTomcatよりも強いように見えますが.しかし、この比較中の変数は完全に制御されていません.TomcatはHTMLを返していますが、
cicada
はjsonだけを返しています.もちろん問題はこれだけではありません.しかし、
cicada
の現在の性能は悪くないことを説明することができます.まとめ
本文は
cicada
の実現原理をあまり議論していないので、興味のあるのはソースコードを見ることができて、すべて比較的に簡単です.後続の更新ではこの内容をよく検討します.
同時に、意外な
cicada
が更新され続け、将来的にはより多くの実用的な機能が追加されます.私は適当なタイミングでそれを私の生産プロジェクトに応用して、もっと多くの友达が参加して一緒にこの「車輪」をもっとよくすることを望んでいます.
プロジェクトのアドレス:https://github.com/crossoverJie/cicada
あなたのいいねと転送は最大のサポートです.