Webサーバーに関するvert.xの概念は?

cg-プロダクション

vert.xがWebサーバーにどのように適用されるのかよくわかりません。

私がWebサーバーについて知っている概念は、スレッドベースの概念です。

  1. Webサーバーを起動すると、Webサーバーが実行されます。
  2. 次に、接続するすべてのクライアントに対して、ソケットを取得します。このソケットは、独自のスレッドハンドラーに渡されます。
  3. 次に、スレッドハンドラーは、この特定のソケットのタスクを処理します。

したがって、どのスレッドがどのソケットに対して作業を行っているかが明確に定義されています。ただし、すべてのソケットに新しいスレッドが必要です。これは、多くのソケットにとって長期的にはコストがかかります。

次に、vert.xが提供するイベントベースの概念があります。これまでのところ、次のように機能するはずです。

  1. VertxインスタンスはVerticlesをデプロイします。
  2. バーティクルはバックグラウンドスレッドで実行されますが、すべてのバーティクルに独自のスレッドがあるわけではありません。例として、Vertxインスタンスに1000個のバーティクルがデプロイされている可能性がありますが、Vertxインスタンスは8スレッド(コア数* 2)のみを処理します。
  3. 次に、イベントループがあります。彼らがどのように頂点を指しているのかわかりません。すべてのバーティクルに2つのイベントループがあることを読みましたが、それがどのように機能するかはよくわかりません。

Webサーバーの例として:

class WebServer: AbstractVerticle() {
    lateinit var server: HttpServer

    override fun start() {
        server = vertx.createHttpServer(HttpServerOptions().setPort(1234).setHost("localhost"))
        var router = Router.router(vertx);
        router.route("/test").handler { routingContext ->
            var response = routingContext.response();
            response.end("Hello from my first HttpServer")
        }
        server.requestHandler(router).listen()
    }
}

このWebサーバーは、Vertxインスタンスに複数回デプロイできます。そして、見たところ、各WebServerインスタンスは独自のスレッドを取得します。100のクライアントを接続して単純な応答で応答しようとすると、各クライアントが同期的に処理されているように見えます。各サーバーハンドラーでThread.sleepステートメントを実行すると、1つおきのクライアントが応答を受け取るためです。ただし、すべてのサーバーハンドラーが1秒間のスリープを開始し、この時間以降はほぼ同じようにすべてのクライアントに応答する必要があります。

これは、100個のクライアントを起動するためのコードです。

fun main(){
    Vertx.vertx().deployVerticle(object : AbstractVerticle(){
        override fun start() {
            for(i in 0 .. 100)
                MyWebClient(vertx)
        }
    })
}

class MyWebClient(val vertx: Vertx) {
    init {
        println("Client starting ...")
        val webClient = WebClient.create(vertx, WebClientOptions().setDefaultPort(1234).setDefaultHost("localhost"))
        webClient.get("/test").send { ar ->
            if(ar.succeeded()){
                val response: HttpResponse<Buffer> = ar.result()

                println("Received response with status code ${response.statusCode()} + ${response.body()}")
            } else {
                println("Something went wrong " + ar.cause().message)
            }
        }
    }
}

誰かがこれの説明を知っていますか?

アレクセイソーシン

そこにはいくつかの大きな問題があります。

これを行うとき:

class WebServer: AbstractVerticle() {
    lateinit var server: HttpServer

    override fun start() {
        server = vertx.createHttpServer(HttpServerOptions().setPort(1234).setHost("localhost"))
       ...
    }
}

次に、このようなもの:

vertx.deployVerticle(WebServer::class.java.name, DeploymentOptions().setInstances(4)

4つのバーティクルを取得しますが、実際にポートでリッスンするのはそのうちの1つだけです。したがって、これ以上の並行性は得られません。

次に、Thread.sleepVert.xコードで使用すると、イベントループスレッドがブロックされます。

第三に、クライアントでのテストが正しくありません。WebClientの作成には非常にコストがかかるため、WebClientを次々に作成することにより、実際には非常にゆっくりとリクエストを発行します。本当にWebアプリケーションをテストしたい場合は、https://github.com/wg/wrkのようなものを使用してください。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Java vert.x Webサーバーを使用して単一ページのrectアプリを提供する

分類Dev

出力に関する動的Webサーバーサーブレットの問題

分類Dev

Webサーバーに関連するautoIndexとは何ですか?

分類Dev

トラフィックを他のVert.xアプリに送るVert.x仮想ホストサーバーを構築する必要があります。この種のアプリ間通信はどのように達成されますか?

分類Dev

IntelliJ IDEAからVert.xサーバーを起動する方法

分類Dev

2つのWebサーバー間で安全に通信するためにどのような原則または概念が存在しますか?

分類Dev

サーバーサイドWebアプリのGoogleOauth2に関するCORSの問題

分類Dev

Ubuntuサーバー12.04のDHCPサーバーに関する質問

分類Dev

X11転送に関連するXサーバーの要件は何ですか?

分類Dev

動的バーティクル-単純なvert.xゲーム用にvert.xアーキテクチャを適切に設計する方法は?

分類Dev

Javaを使用したLinux / Webサーバー環境のテストに関する推奨事項

分類Dev

Webサーバー関連(AJAXなど)を使用せずに外部JavaScriptのテキストを取得する方法

分類Dev

ネストされた算術に関する問題WebサーバーでのMySQLクエリ

分類Dev

Vert.xイベントバスに関する質問

分類Dev

x86ページングに特権リングの概念がないのはなぜですか?

分類Dev

Nvidia X サーバーの設定を変更するには?

分類Dev

Airflow WebサーバーでSSLを有効にする方法は?

分類Dev

UbuntuサーバーへのGUIの追加に関する問題

分類Dev

複数の画像をWebサーバーに送信する

分類Dev

MongoDBサーバーの起動に関する警告

分類Dev

NSURLConnectionとサーバーの応答に関する問題

分類Dev

IMAPサーバーでのPLAIN認証に関する質問

分類Dev

OpenVPNサーバーの構成に関する問題

分類Dev

iOS写真のサーバー側処理に関する推測

分類Dev

WebRTCのTURNサーバーに関する質問

分類Dev

Ubuntuサーバーの特殊文字に関する問題

分類Dev

サーバーに関するいくつかの質問

分類Dev

Eurekaサーバーの起動に関する問題

分類Dev

Flutter AppAPIサーバーの接続に関する問題

Related 関連記事

  1. 1

    Java vert.x Webサーバーを使用して単一ページのrectアプリを提供する

  2. 2

    出力に関する動的Webサーバーサーブレットの問題

  3. 3

    Webサーバーに関連するautoIndexとは何ですか?

  4. 4

    トラフィックを他のVert.xアプリに送るVert.x仮想ホストサーバーを構築する必要があります。この種のアプリ間通信はどのように達成されますか?

  5. 5

    IntelliJ IDEAからVert.xサーバーを起動する方法

  6. 6

    2つのWebサーバー間で安全に通信するためにどのような原則または概念が存在しますか?

  7. 7

    サーバーサイドWebアプリのGoogleOauth2に関するCORSの問題

  8. 8

    Ubuntuサーバー12.04のDHCPサーバーに関する質問

  9. 9

    X11転送に関連するXサーバーの要件は何ですか?

  10. 10

    動的バーティクル-単純なvert.xゲーム用にvert.xアーキテクチャを適切に設計する方法は?

  11. 11

    Javaを使用したLinux / Webサーバー環境のテストに関する推奨事項

  12. 12

    Webサーバー関連(AJAXなど)を使用せずに外部JavaScriptのテキストを取得する方法

  13. 13

    ネストされた算術に関する問題WebサーバーでのMySQLクエリ

  14. 14

    Vert.xイベントバスに関する質問

  15. 15

    x86ページングに特権リングの概念がないのはなぜですか?

  16. 16

    Nvidia X サーバーの設定を変更するには?

  17. 17

    Airflow WebサーバーでSSLを有効にする方法は?

  18. 18

    UbuntuサーバーへのGUIの追加に関する問題

  19. 19

    複数の画像をWebサーバーに送信する

  20. 20

    MongoDBサーバーの起動に関する警告

  21. 21

    NSURLConnectionとサーバーの応答に関する問題

  22. 22

    IMAPサーバーでのPLAIN認証に関する質問

  23. 23

    OpenVPNサーバーの構成に関する問題

  24. 24

    iOS写真のサーバー側処理に関する推測

  25. 25

    WebRTCのTURNサーバーに関する質問

  26. 26

    Ubuntuサーバーの特殊文字に関する問題

  27. 27

    サーバーに関するいくつかの質問

  28. 28

    Eurekaサーバーの起動に関する問題

  29. 29

    Flutter AppAPIサーバーの接続に関する問題

ホットタグ

アーカイブ