I'm going to release a new major version.
I should choose v5.0.0 instead of v4.3.0 because warp sets a loose upper boundary .
Breaking changes include:
A client takes an Aux argument:
type Client a = (forall b. Request -> (Response -> IO b) -> IO b) -> Aux -> IO a
Aux is:
data Aux = Aux
{ auxPossibleClientStreams :: IO Int
-- ^ How many streams can be created without blocking.
, auxServerMaxStreams :: IO Int
-- ^ Getting server's SETTINGS_MAX_CONCURRENT_STREAMS.
-- If the server does not inform it,
-- 'concurrentStreams' is used.
}
You can set concurrentStreams and windowSize through ClientConfig in client's run.
For forward compatibility, ClientConfig constructor is not exported.
Server's run now takes ServerConfig which you can specify the parameters above and numberOfWorkers.
V5.0.0 controls flow very well, so servers can prevent DoS from clients. If you are interested, use grep -r "FLOW CONTROL" Network to find code for DoS prevention.
@epoberezkin @akshaymankar @edsko If you have time, please give a look at master.
Any comments are welcome.
I'm going to release a new major version. I should choose v5.0.0 instead of v4.3.0 because
warp
sets a loose upper boundary . Breaking changes include:A client takes an
Aux
argument:Aux
is:You can set
concurrentStreams
andwindowSize
throughClientConfig
in client'srun
. For forward compatibility,ClientConfig
constructor is not exported.Server's
run
now takesServerConfig
which you can specify the parameters above andnumberOfWorkers
.V5.0.0 controls flow very well, so servers can prevent DoS from clients. If you are interested, use
grep -r "FLOW CONTROL" Network
to find code for DoS prevention.@epoberezkin @akshaymankar @edsko If you have time, please give a look at
master
. Any comments are welcome.