Skip to content

Commit 5877606

Browse files
authored
Merge pull request #279 from Lightbug-HQ/chore/revert-keepalive-default
Revert keepalive default
2 parents 1097de6 + 98cb062 commit 5877606

4 files changed

Lines changed: 36 additions & 3 deletions

File tree

lightbug_http/server.mojo

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff 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^

tests/integration/integration_client.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import concurrent.futures
12
import requests
23
import socket
34
import time
@@ -32,6 +33,24 @@
3233
)
3334
assert 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+
3554
print("\n~~~ Testing content-length mismatch (smaller) ~~~")
3655

3756

tests/integration/integration_test_server.mojo

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,6 @@ struct IntegrationTestService(HTTPService):
3737

3838

3939
fn 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)
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
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()

0 commit comments

Comments
 (0)