О связи между значением тайм-аута и задержкой соединения Socket - PullRequest
0 голосов
/ 28 марта 2020

Я написал следующий код отправки / получения UDP.

Код для отправки каждую секунду (udpSend.py) и код для ожидания каждую секунду (udpRecv.py).

Первый Я установил значение времени ожидания в udpRecv.py на 0,1, затем изменил значение времени ожидания на 5 и попытался.

udpSend.py

import time
import threading
from socket import socket, AF_INET, SOCK_DGRAM

HOST = ''
PORT = 5000
ADDRESS = "127.0.0.1"

s = socket(AF_INET, SOCK_DGRAM)
startTime = time.time()

def worker():
    try:
        msg = str(time.time()-startTime)
        print(msg)
        s.sendto(msg.encode(), (ADDRESS, PORT))
        time.sleep(8)
    except:
        pass

def scheduler(interval, f, wait = True):
    base_time = time.time()
    next_time = 0
    while True:
        t = threading.Thread(target = f)
        t.start()
        if wait:
            t.join()
        next_time = ((base_time - time.time()) % interval) or interval
        time.sleep(next_time)

scheduler(1, worker, False)

udpRecv.py

import time
import threading
from socket import socket, AF_INET, SOCK_DGRAM

HOST = ''   
PORT = 5000

s = socket(AF_INET, SOCK_DGRAM)
s.bind((HOST, PORT))
s.settimeout(0.1)

def worker():
    try:
        msg, address = s.recvfrom(8192)
        print(msg.decode('utf-8'))
        time.sleep(8)
    except:
        pass

def scheduler(interval, f, wait = True):
    base_time = time.time()
    next_time = 0
    while True:
        t = threading.Thread(target = f)
        t.start()
        if wait:
            t.join()
        next_time = ((base_time - time.time()) % interval) or interval
        time.sleep(next_time)

scheduler(1, worker, False)

Затем был получен следующий вывод.

** Когда значение тайм-аута = 0,1 ** (выход слева - отправитель, выход справа - получатель) enter image description here

** Когда значение тайм-аута = 5 ** (выход слева - отправитель, выход справа - приемник) enter image description here

На изображении выше, когда значение тайм-аута равно 0,1, задержка составляет почти 1 секунду, тогда как когда значение тайм-аута равно 5, оно выглядит почти как нет задержки. Как это вызывает задержку?

В этом случае увеличение значения тайм-аута дает желаемый результат. Однако я думаю, что не всегда необходимо увеличивать значение тайм-аута. Когда мне следует увеличивать или уменьшать значение тайм-аута?

Есть ли способ уменьшить задержку при сохранении значения тайм-аута на уровне 0,1?

...