【问题标题】:python UDP socket client recevfrom is very slowpython UDP套接字客户端recevfrom非常慢
【发布时间】:2019-12-09 19:00:17
【问题描述】:

我在 respberrypi 3 上使用 python3 代码。 这是服务器上的代码:

import json, time, requests, signal, sys, socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, 0)
sock.bind((s.settings["udpIP"], s.settings["udpPort"]))
sessions = {}
c = 0

while True:
    data, addr = sock.recvfrom(65535)

if somedata is x:
        sequence = <clientSessionSeq> #startint at 000 and then 001 ( to monitor the udp packet so i wont lose any packets)
        sock.sendto(sequence, (addr))       # returning the client the seq i got so it may proceed sending the next one, if its not the same seq client will resend lost package
            s.print_info(
                {
                    "REMOTE_ADDRESS": addr,
                    "STATUS": "PUBLISH",
                },
            )         
            c = 0
        c = c + 1

客户端代码 -

data = data_iter()
while True:
        # if seq is ok then pull next data
        dataTmp = next(data)
    sock.sendto(
        "ID ".encode() + headers["SESSION_ID"].encode() + sequence + dataTmp,
        (s.settings["server"]["ip"], s.settings["udpPort"]),
    )
    try:
        sock.settimeout(3)
        response, addr = sock.recvfrom(1024)
    except IOError as  e:
        exc_type, exc_value, exc_traceback = sys.exc_info()
        traceback.print_exception(exc_type, exc_value, exc_traceback)
        s.print_info(e)

我的问题是在response, addr = sock.recvfrom(1024) 的客户端代码中,我有时会在 3 秒后超时,服务器向客户端发送它收到的 seq,但客户端 recvfrom 被卡住\延迟。

有没有办法在树莓派或套接字代码中对 udp 进行一些调整?

我不能使用tcp,我知道它会更好,我必须使用udp

如果我删除了recivefrom,它运行良好但我丢失了数据包,我将它用于流式录制,因此我必须进行完整录制。我只需要调整建议或其他使用 udp 而不是套接字的方法?

谢谢。

【问题讨论】:

    标签: python sockets socket.io udp raspberry-pi3


    【解决方案1】:

    这可能不是由于 UDP“非常慢”引起的,实际上只是丢包的一个例子。鉴于您说您需要在 UDP 中工作,您需要自己处理。

    我假设您最终将不得不编写与 TCP 中存在的代码非常相似的代码,因此我建议您在那里寻找以前如何解决它。 TCP 使用一种称为滑动窗口的东西来随时跟踪“正在进行”的数据包的状态,并且应该有很多关于它们如何/为什么工作的现有文档。

    【讨论】:

      猜你喜欢
      • 2011-03-16
      • 2015-03-09
      • 2011-08-15
      • 2020-08-10
      • 2018-05-23
      • 2018-09-08
      • 2014-11-19
      • 2018-02-04
      • 1970-01-01
      相关资源
      最近更新 更多