我有一个基本的客户端/服务器程序。服务器向客户端发送时间戳。我想检查客户端是否已回复消息,如果没有,请重新发送请求。我该怎么做呢?
while 1:
wait = "True"
line = raw_input("Press enter to get the time or \"STOP\" to exit: ")
if line == "STOP":
break
print "Waiting for response......"
s.sendto(line, (servAddr,servPort))
line, server = s.recvfrom(256)
while wait: // Obviously wrong, but pseudo
if line == "":
print 'Send another'
wait = False
print (line)
答案 0 :(得分:1)
您似乎需要class MyJob < ActiveJob::Base
def perform(*args)
# Do something unless some flag is raised
ensure
self.class.set(wait: 1.hour).perform_later(*args)
end
end
或socket.settimeout()
模块。
使用select
,如果在指定的时间范围内没有收到任何数据,您可以告诉socket引发.settimeout()
例外。如果您的服务器只需要处理一个客户端(每个线程/进程/ greenlet一个客户端/其他任何工作),这就足够了。如果您希望服务器在等待客户端响应并且您不使用任何线程/异步框架时执行某些操作,那么您可能需要编写更多代码,因为您要设置零超时并跟踪手动重新发送消息的时间。
socket.timeout
模块为您提供了使用常见超时监听多个套接字的工具。