package Ġio . ktor . samples . async Ċ Ċ import Ġkotlinx . html .* Ċ import Ġio . ktor . application .* Ċ import Ġio . ktor . features .* Ċ import Ġio . ktor . html .* Ċ import Ġio . ktor . routing .* Ċ import Ġkotlinx . coroutines .* Ċ import Ġjava . util .* Ċ import Ġkotlin . system .* Ċ Ċ /** Ċ Ġ* ĠA Ġdedicated Ġcontext Ġfor Ġsample Ġ" compute - int ensive " Ġtasks . Ċ Ġ*/ Ċ val Ġcompute Ġ= Ġnew Fixed ThreadPool Context ( 4 , Ġ" compute ") Ċ Ċ /** Ċ Ġ* ĠAn Ġalias Ġto Ġsimplify Ġa Ġsus pending Ġfunctional Ġtype . Ċ Ġ*/ Ċ type alias ĠDelay Provider Ġ= Ġsuspend Ġ( ms : ĠInt ) Ġ-> ĠUnit Ċ Ċ /** Ċ Ġ* ĠThe Ġmain Ġentry Ġpoint . ĠWe Ġuse Ġ@ Jvm Over loads Ġso Ġthere Ġis Ġa Ġsignature Ġwith Ġ` Application . main ()` Ġthat Ġwill Ġbe Ġlocated Ċ Ġ* Ġvia Ġreflection . ĠThis Ġfunction Ġis Ġreferenced Ġby Ġthe Ġapplication . conf Ġfile . Ċ Ġ* Ċ Ġ* ĠWe Ġpass Ġseveral Ġarguments Ġwith Ġservices Ġand Ġproviders Ġso Ġwe Ġcan Ġprovide Ġmocks Ġwhen Ġdoing Ġintegration Ġtests . Ċ Ġ* Ċ Ġ* ĠFor Ġmore Ġinformation Ġabout Ġthis Ġfile : Ġhttps :// ktor . io / servers / configuration . html # ho con - file Ċ Ġ*/ Ċ @ Jvm Over loads Ċ fun ĠApplication . main ( random : ĠRandom Ġ= ĠRandom (), Ġdelay Provider : ĠDelay Provider Ġ= Ġ{ Ġdelay ( it . to Long ()) Ġ}) Ġ{ ĊĠĠĠ Ġ// ĠThis Ġadds Ġautomatically ĠDate Ġand ĠServer Ġheaders Ġto Ġeach Ġresponse , Ġand Ġwould Ġallow Ġyou Ġto Ġconfigure ĊĠĠĠ Ġ// Ġadditional Ġheaders Ġserved Ġto Ġeach Ġresponse . ĊĠĠĠ Ġinstall ( Default Headers ) ĊĠĠĠ Ġ// ĠThis Ġuses Ġuse Ġthe Ġlogger Ġto Ġlog Ġevery Ġcall Ġ( request / response ) ĊĠĠĠ Ġinstall ( Call Logging ) ĊĊĠĠĠ Ġ// ĠRegisters Ġroutes ĊĠĠĠ Ġrouting Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠTab bed Ġbrowsers Ġcan Ġwait Ġfor Ġfirst Ġrequest Ġto Ġcomplete Ġin Ġone Ġtab Ġbefore Ġmaking Ġa Ġrequest Ġin Ġanother Ġtab . ĊĠĠĠĠĠĠĠ Ġ// ĠPres um ably Ġthey Ġassume Ġsecond Ġrequest Ġwill Ġhit Ġ 3 0 4 ĠNot ĠModified Ġand Ġsave Ġon Ġdata Ġtransfer . ĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġyou Ġwant Ġto Ġverify Ġsimultaneous Ġconnections , Ġeither Ġuse Ġ" curl " Ġor Ġuse Ġdifferent ĠURLs Ġin Ġdifferent Ġtabs ĊĠĠĠĠĠĠĠ Ġ// ĠLike Ġlocalhost : 8 0 8 0 / 1 , Ġlocalhost : 8 0 8 0 / 2 , Ġlocalhost : 8 0 8 0 / 3 , Ġetc ĊĠĠĠĠĠĠĠ Ġget ("/ { ... }") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠstartTime Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond Handling Long Calculation ( random , Ġdelay Provider , ĠstartTime ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠFunction Ġthat Ġwill Ġperform Ġa Ġlong Ġcomputation Ġin Ġa Ġthread pool Ġgenerating Ġrandom Ġnumbers Ċ Ġ* Ġand Ġthen Ġwill Ġrespond Ġwith Ġthe Ġresult . Ċ Ġ*/ Ċ private Ġsuspend Ġfun ĠApplication Call . respond Handling Long Calculation ( random : ĠRandom , Ġdelay Provider : ĠDelay Provider , ĠstartTime : ĠLong ) Ġ{ ĊĠĠĠ Ġval Ġqueue Time Ġ= ĠSystem . currentTimeMillis () Ġ- ĠstartTime ĊĠĠĠ Ġvar Ġnumber Ġ= Ġ 0 ĊĠĠĠ Ġval Ġcompute Time Ġ= Ġmeasure Time Millis Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠWe Ġspecify Ġa Ġcoroutine Ġcontext , Ġthat Ġwill Ġuse Ġa Ġthread Ġpool Ġfor Ġlong Ġcomputing Ġoperations . ĊĠĠĠĠĠĠĠ Ġ// ĠIn Ġthis Ġcase Ġit Ġis Ġnot Ġnecessary Ġsince Ġwe Ġare Ġ" delay ing ", Ġnot Ġsleep ing Ġthe Ġthread . ĊĠĠĠĠĠĠĠ Ġ// ĠBut Ġserves Ġas Ġan Ġexample Ġof Ġwhat Ġto Ġdo Ġif Ġwe Ġwant Ġto Ġperform Ġslow Ġnon - as ynchronous Ġoperations ĊĠĠĠĠĠĠĠ Ġ// Ġthat Ġwould Ġblock Ġthreads . ĊĠĠĠĠĠĠĠ Ġwith Context ( compute ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( index Ġin Ġ 0 Ġuntil Ġ 3 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay Provider ( 1 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnumber Ġ+= Ġrandom . nextInt ( 1 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠRes pon ds Ġwith Ġan ĠHTML Ġfile , Ġgenerated Ġwith Ġthe Ġkotlinx . html ĠDSL . ĊĠĠĠ Ġ// ĠMore Ġinformation Ġabout Ġthis ĠDSL : Ġhttps :// github . com / Kotlin / kotlin x . html ĊĠĠĠ Ġrespond Html Ġ{ ĊĠĠĠĠĠĠĠ Ġhead Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ{ Ġ+" K tor : Ġasync " Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbody Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+" Hello Ġfrom ĠK tor ĠAsync Ġsample Ġapplication " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+" We Ġcalculated Ġnumber Ġ$ number Ġin Ġ$ compute Time Ġms Ġof Ġcompute Ġtime , Ġs pending Ġ$ queue Time Ġms Ġin Ġqueue ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ