这是问题是真正关注我的问题,而不是相对于我可以找到关于此主题的任何其他问题。丢弃数据报套接字的传入'数据包
PSA:当我说“包”我的意思是在一个单一的socket.recv(MAXSIZE)接收到一个完整的字符串
我开发了类似的代码Java的(我PREF语言)和它相同的结果是好的,现在我必须做python。
我有两个并行运行的进程: 1-常规客户端套接字连接到特定IP 2-A“客户端”数据报套接字绑定到“ALL”IP。
正常的套接字工作正常,因为我期望,而数据报没有。
我连续从服务器(不是我的,不是开源)接收数据包的速度超过每秒5次,但我想每3秒只处理其中的一个。在java中,我只是做了一个“睡眠”,并没有问题,我只得到最后一个活动数据包,而在Python中使用“time.sleep(3)”数据包排队(我不知道如何以及在哪里)并没有下降。
我必须放弃它们,因为这些都不需要,我必须在一个和另一个之间进行HTTP调用,所以我无法为以该速率接收的每组数据启动HTTP POST!
这里是我的“代码”为监听套接字,一些意见是对私有代码:
def listenPositions():
lsSocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
lsSocket.bind(("0.0.0.0", 8787))
lsSocket.setblocking(0)
try:
while True:
ready = select.select([lsSocket], [], [], 1)
if ready[0]:
lsSocket.settimeout(1)
recvData = lsSocket.recv(16384)
if len(recvData) != 0:
recv = recvData[0:len(recvData)].decode("utf-8")
#print("LS: Received: " + recv)
strings = filter(None, str(recv).split('\n'))
print("Strings count=" + str(len(strings))+ ": " + str(strings))
for item in strings:
#parse the received strings as json and get the items
jsonPosition = json.loads(item)
strId = jsonPosition["id"]
coordinates = jsonPosition.get("coordinates")
if coordinates is None:
continue
print("coordinates not null:" + str(coordinates))
#DO THE HTTP POST REQUEST
time.sleep(3) #Pause the system for X seconds, but other packets are queued!
else:
print("LS: Received empty")
else:
print("LS: No data, timeout")
except Exception as e:
print(e)
#handle exceptions...
print("Exception, close everything")