mirror of
https://github.com/dashpay/dash.git
synced 2024-12-26 04:22:55 +01:00
Merge #11323: mininode: add an optimistic write and disable nagle
1817398b3
mininode: add an optimistic write and disable nagle (Cory Fields)
Pull request description:
Disclaimer: I'm not familiar with asyncore, so I'm unclear how safe this is. It works for me (tm).
Because the poll/select loop may pause for 100msec before actually doing a send, and we have no way to force the loop awake, try sending from the calling thread if the queue is empty.
Also, disable nagle as all sends should be either full messages or unfinished sends.
This shaves an average of ~1 minute or so off of my accumulated runtime, and 10-15 seconds off of actual runtime.
Tree-SHA512: 6b61b8058e621dacf0b4dd353c10e3666fbda0691440eb6ebc432491ebada80a781dcd09291bf03e70112a41d3c2a0c91775ed08824b79bf8d0ebed11595c28b
This commit is contained in:
parent
cb33702b74
commit
dac2112dd0
@ -1715,6 +1715,7 @@ class NodeConn(asyncore.dispatcher):
|
|||||||
self.dstaddr = dstaddr
|
self.dstaddr = dstaddr
|
||||||
self.dstport = dstport
|
self.dstport = dstport
|
||||||
self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
|
self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||||
|
self.socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
|
||||||
self.sendbuf = b""
|
self.sendbuf = b""
|
||||||
self.recvbuf = b""
|
self.recvbuf = b""
|
||||||
self.ver_send = 209
|
self.ver_send = 209
|
||||||
@ -1855,7 +1856,14 @@ class NodeConn(asyncore.dispatcher):
|
|||||||
tmsg += h[:4]
|
tmsg += h[:4]
|
||||||
tmsg += data
|
tmsg += data
|
||||||
with mininode_lock:
|
with mininode_lock:
|
||||||
self.sendbuf += tmsg
|
if (len(self.sendbuf) == 0 and not pushbuf):
|
||||||
|
try:
|
||||||
|
sent = self.send(tmsg)
|
||||||
|
self.sendbuf = tmsg[sent:]
|
||||||
|
except BlockingIOError:
|
||||||
|
self.sendbuf = tmsg
|
||||||
|
else:
|
||||||
|
self.sendbuf += tmsg
|
||||||
self.last_sent = time.time()
|
self.last_sent = time.time()
|
||||||
|
|
||||||
def got_message(self, message):
|
def got_message(self, message):
|
||||||
|
Loading…
Reference in New Issue
Block a user