File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -477,7 +477,7 @@ struct Server(Movable):
477477 fn __init__ (
478478 out self ,
479479 var address : String = " 127.0.0.1" ,
480- tcp_keep_alive : Bool = True ,
480+ tcp_keep_alive : Bool = False ,
481481 ):
482482 self .config = ServerConfig()
483483 self ._address = address^
@@ -487,7 +487,7 @@ struct Server(Movable):
487487 out self ,
488488 var config : ServerConfig,
489489 var address : String = " 127.0.0.1" ,
490- tcp_keep_alive : Bool = True ,
490+ tcp_keep_alive : Bool = False ,
491491 ):
492492 self .config = config^
493493 self ._address = address^
Original file line number Diff line number Diff line change 1+ import concurrent .futures
12import requests
23import socket
34import time
3233)
3334assert response .status_code == 200
3435
36+ print ("\n ~~~ Testing parallel connections ~~~" )
37+ # Browsers open 6+ parallel connections for assets.
38+ # A single-threaded server with keep-alive blocks on conn.read() waiting for
39+ # the next request, preventing other connections from being accepted.
40+ # This test verifies all parallel requests complete within a reasonable time.
41+
42+
43+ def fetch (path ):
44+ return requests .get (f"http://127.0.0.1:8080{ path } " , headers = {"connection" : "close" })
45+
46+
47+ with concurrent .futures .ThreadPoolExecutor (max_workers = 4 ) as executor :
48+ futures = [executor .submit (fetch , f"/?n={ i } " ) for i in range (4 )]
49+ results = concurrent .futures .wait (futures , timeout = 5 )
50+ assert len (results .done ) == 4 , f"Only { len (results .done )} /4 parallel requests completed within 5s"
51+ for f in results .done :
52+ assert f .result ().status_code == 200
53+
3554print ("\n ~~~ Testing content-length mismatch (smaller) ~~~" )
3655
3756
Original file line number Diff line number Diff line change @@ -37,6 +37,6 @@ struct IntegrationTestService(HTTPService):
3737
3838
3939fn main () raises :
40- var server = Server(tcp_keep_alive = True )
40+ var server = Server()
4141 var service = IntegrationTestService()
4242 server.listen_and_serve(" 127.0.0.1:8080" , service)
Original file line number Diff line number Diff line change 1+ import testing
2+ from lightbug_http.server import Server
3+
4+
5+ def test_server_defaults_to_keep_alive_off ():
6+ var server = Server()
7+ testing.assert_false(
8+ server.tcp_keep_alive,
9+ " tcp_keep_alive must default to False for single-threaded server" ,
10+ )
11+
12+
13+ def main ():
14+ testing.TestSuite.discover_tests[__functions_in_module()]().run()
You can’t perform that action at this time.
0 commit comments