python UDP套接字客户端recevfrom非常慢
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python UDP套接字客户端recevfrom非常慢相关的知识,希望对你有一定的参考价值。
我在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卡住了延迟了。
有没有办法对raspberrypi或套接字代码中的udp进行一些调整?
我不能使用tcp,我知道它会更好,我必须使用udp
如果无法删除recivefrom
,它将运行良好,但是我丢失了数据包,我将其用于流式录制,因此必须获得完整的录制。我只需要调整建议或使用udp而不使用套接字的另一种方法?
谢谢。
答案
大概这不是由于UDP太“慢”所致,实际上只是丢包的一个示例。假设您说需要使用UDP,则需要自己处理。
我以为您将不得不编写与TCP中存在的代码非常相似的代码,因此,我建议您在此查找以前如何解决它。 TCP使用一种称为滑动窗口的工具来随时跟踪处于“运行中”状态的数据包的状态,并且应该有许多关于它们如何/为什么工作的现有文档。
以上是关于python UDP套接字客户端recevfrom非常慢的主要内容,如果未能解决你的问题,请参考以下文章