on master help sign in
refactoring for max concurrency.
commit397d4e0f04fa71398a3582e0181617fbb1a0ac60 authorKazu Yamamoto <kazu@iij.ad.jp> dateThu 16 Jun 2016, 14:53 (10 years ago) parent7e423d5
2 files changed+8−2
warp/Network/Wai/Handler/Warp/HTTP2/Receiver.hs+7−2 warp/Network/Wai/Handler/Warp/HTTP2/Types.hs+1
warp/Network/Wai/Handler/Warp/HTTP2/Receiver.hs+7−2
@@ -160,7 +160,8 @@ frameReceiver ctx mkreq recvN = loop 0 `E.catch` sendGoaway
160160 when (ftyp == FrameHeaders) $ do
161161 writeIORef currentStreamId streamId
162162 cnt <- readIORef concurrency
163− when (cnt >= recommendedConcurrency) $
163+ -- Checking the limitation of concurrency
164+ when (cnt >= maxConcurrency) $
164165 E.throwIO $ StreamError RefusedStream streamId
165166 ws <- initialWindowSize <$> readIORef http2settings
166167 newstrm <- newStream streamId (fromIntegral ws)
@@ -170,8 +171,11 @@ frameReceiver ctx mkreq recvN = loop 0 `E.catch` sendGoaway
170171
171172 consume = void . recvN
172173
174+maxConcurrency :: Int
175+maxConcurrency = recommendedConcurrency
176+
173177initialFrame :: ByteString
174−initialFrame = settingsFrame id [(SettingsMaxConcurrentStreams,recommendedConcurrency)]
178+initialFrame = settingsFrame id [(SettingsMaxConcurrentStreams,maxConcurrency)]
175179
176180----------------------------------------------------------------
177181
@@ -181,6 +185,7 @@ control FrameSettings header@FrameHeader{flags} bs Context{http2settings, contro
181185 case checkSettingsList alist of
182186 Just x -> E.throwIO x
183187 Nothing -> return ()
188+ -- HTTP/2 Setting from a browser
184189 unless (testAck flags) $ do
185190 modifyIORef' http2settings $ \old -> updateSettings old alist
186191 let !frame = settingsFrame setAck []
warp/Network/Wai/Handler/Warp/HTTP2/Types.hs+1
@@ -96,6 +96,7 @@ data Sequence = SFinish
9696
9797-- | The context for HTTP/2 connection.
9898data Context = Context {
99+ -- HTTP/2 settings received from a browser
99100 http2settings :: !(IORef Settings)
100101 , firstSettings :: !(IORef Bool)
101102 , streamTable :: !StreamTable