Skip to content

Commit 5a0ab49

Browse files
committed
Set TCP_NODELAY in all echo server benchmarks (go sets it by default)
1 parent ab27deb commit 5a0ab49

File tree

7 files changed

+36
-2
lines changed

7 files changed

+36
-2
lines changed

servers/asyncioecho.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,11 @@ async def echo_server(loop, address, unix):
3030

3131

3232
async def echo_client(loop, client):
33+
try:
34+
sock.setsockopt(IPPROTO_TCP, TCP_NODELAY, 1)
35+
except (OSError, NameError):
36+
pass
37+
3338
with client:
3439
while True:
3540
data = await loop.sock_recv(client, 102400)
@@ -41,8 +46,12 @@ async def echo_client(loop, client):
4146

4247

4348
async def echo_client_streams(reader, writer):
49+
sock = writer.get_extra_info('socket')
50+
try:
51+
sock.setsockopt(IPPROTO_TCP, TCP_NODELAY, 1)
52+
except (OSError, NameError):
53+
pass
4454
if PRINT:
45-
sock = writer.get_extra_info('socket')
4655
print('Connection from', sock.getpeername())
4756
while True:
4857
data = await reader.read(102400)
@@ -57,6 +66,11 @@ async def echo_client_streams(reader, writer):
5766
class EchoProtocol(asyncio.Protocol):
5867
def connection_made(self, transport):
5968
self.transport = transport
69+
sock = transport.get_extra_info('socket')
70+
try:
71+
sock.setsockopt(IPPROTO_TCP, TCP_NODELAY, 1)
72+
except (OSError, NameError):
73+
pass
6074

6175
def connection_lost(self, exc):
6276
self.transport = None

servers/curioecho.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,16 @@
33
# A simple echo server
44

55
from curio import Kernel, new_task, run_server
6+
from socket import *
67

78

89
async def echo_handler(client, addr):
910
print('Connection from', addr)
11+
try:
12+
client.setsockopt(IPPROTO_TCP, TCP_NODELAY, 1)
13+
except (OSError, NameError):
14+
pass
15+
1016
while True:
1117
data = await client.recv(102400)
1218
if not data:

servers/curioecho_streams.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
from curio import Kernel, new_task, run_server
2-
2+
from socket import *
33

44
async def echo_handler(client, addr):
55
print('Connection from', addr)
6+
try:
7+
client.setsockopt(IPPROTO_TCP, TCP_NODELAY, 1)
8+
except (OSError, NameError):
9+
pass
610
reader, writer = client.make_streams()
711
async with reader, writer:
812
while True:

servers/gevecho.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
11
# Taken from curio: https://github.com/dabeaz/curio
22

33
from gevent.server import StreamServer
4+
from socket import *
45

56
# this handler will be run for each incoming connection in a dedicated greenlet
67
def echo(socket, address):
78
print('New connection from %s:%s' % address)
9+
try:
10+
socket.setsockopt(IPPROTO_TCP, TCP_NODELAY, 1)
11+
except (OSError, NameError):
12+
pass
813
while True:
914
data = socket.recv(100000)
1015
if not data:

servers/nodeecho.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
var net = require('net');
77
net.createServer(function(socket){
8+
socket.setNoDelay();
89
socket.on('data', function(data){
910
socket.write(data)
1011
});

servers/torecho.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
class StreamHandler:
66
def __init__(self, stream):
77
self._stream = stream
8+
stream.set_nodelay(True)
89
self._stream.read_until_close(None, self._handle_read)
910

1011
def _handle_read(self, data):

servers/twistedecho.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@
88
class Echo(protocol.Protocol):
99
"""This is just about the simplest possible protocol"""
1010

11+
def connectionMade(self):
12+
self.transport.setTcpNoDelay(True)
13+
1114
def dataReceived(self, data):
1215
"As soon as any data is received, write it back."
1316
self.transport.write(data)

0 commit comments

Comments
 (0)