Prendiamo ad esempio il socket Web di Spring (con tomcat).
Web Socket blocca i thread mantenendo la connessione tra server e client? (Ad esempio, la connessione può durare 2-3 ore).
( Il web socket utilizza thread allo stesso modo della normale richiesta http (ad esempio, blocchi / proprietario thread durante l'esecuzione delle richieste) )
Supponiamo che il server sia configurato per avere 200 thread nel pool di thread e utilizza il blocco io.
Significa che se disponiamo di 200 connessioni websocket long-living aperte, il server non sarà in grado di gestire altre normali richieste HTTP o connessioni socket web mentre quelle 200 connessioni sono aperte?
Da tomcat docs ( link ):
maxThreads
The maximum number of request processing threads to be created by this Connector, which therefore determines the maximum number of simultaneous requests that can be handled. If not specified, this attribute is set to 200. If an executor is associated with this connector, this attribute is ignored as the connector will execute tasks using the executor rather than an internal thread pool. Note that if an executor is configured any value set for this attribute will be recorded correctly but it will be reported (e.g. via JMX) as -1 to make clear that it is not used.
Quindi questo significa che se avremo 200 socket web longevi, il server non potrà più accettare richieste?
Quindi, se un sito web ha una quantità enorme di utenti e ha bisogno di server di almeno 10000 utenti (che aprono WebSocket) contemporaneamente, vuol dire che ha bisogno di 50 server solo per quei 10.000 utenti?
E riguardo il non blocco io? (Netty, Akka http)