/* Ċ Ġ* ĠJ aval in Ġ- Ġhttps :// jav al in . io Ċ Ġ* ĠCopyright Ġ 2 0 1 7 ĠDavid ĠÃ ħ se Ċ Ġ* ĠLicensed Ġunder ĠApache Ġ 2 . 0 : Ġhttps :// github . com / tip sy / jav al in / blob / master / LICENSE Ċ Ġ*/ Ċ Ċ package Ġio . jav al in . examples Ċ Ċ import Ġio . jav al in . J aval in Ċ import Ġio . jav al in . http . sse . S se Client Ċ import Ġorg . eclipse . jetty . server . Server Ċ import Ġorg . eclipse . jetty . util . thread . Queued ThreadPool Ċ import Ġjava . util . concurrent . Concurrent Linked Queue Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ ĊĊĠĠĠ Ġval Ġtp Ġ= ĠQue ued ThreadPool ( 8 , Ġ 2 , Ġ 6 0 _ 0 0 0 ) ĊĠĠĠ Ġval Ġcounter Clients Ġ= ĠConcurrent Linked Queue < S se Client >() ĊĠĠĠ Ġval Ġstats Clients Ġ= ĠConcurrent Linked Queue < S se Client >() ĊĊĠĠĠ ĠJ aval in . create Ġ{ ĊĠĠĠĠĠĠĠ Ġit . add Static Files ("/ public ") ĊĠĠĠĠĠĠĠ Ġit . server Ġ{ ĠServer ( tp ) Ġ} ĊĠĠĠ Ġ}. apply Ġ{ ĊĠĠĠĠĠĠĠ Ġget ("/") Ġ{ Ġit . redirect ("/ sse / sse - example . html ") Ġ} ĊĠĠĠĠĠĠĠ Ġs se ("/ sse - counter ") Ġ{ Ġclient Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcounter Clients . add ( client ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient . onClose Ġ{ Ġcounter Clients . remove ( client ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġs se ("/ sse - stats ") Ġ{ Ġevent Source Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstats Clients . add ( event Source ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevent Source . onClose Ġ{ Ġstats Clients . remove ( event Source ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}. start ( 7 0 0 0 ) ĊĊĠĠĠ Ġfor Ġ( counter Ġin Ġ 1 .. 9 9 9 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcounter Clients . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . send Event (" Counter : Ġ$ counter ") Ġ// Ġsend Ġas Ġ" message " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . send Event (" counter ", Ġ" Counter : Ġ$ counter ", Ġ 1 . toString ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġstats Clients . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . send Event (" stats ", Ġ" Clients : Ġ${ counter Clients . size Ġ+ Ġstats Clients . size }, ĠThread s : Ġ${ tp . busy Threads }/${ tp . threads }", Ġ 9 9 9 . toString ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠTimeUnit . SECONDS . sleep ( 1 ) ĊĠĠĠ Ġ} Ċ } Ċ