如何做一个操作,如果它在6秒内没有完成,就停止它?

我正在尝试使用LuaSocket在Lua中从telnet连接接收信息。我已经做到了这一点,但是当我接收时,如果我接收到小于最大字节数的任何内容,它需要5秒钟。如果我接收的字节数超过屏幕上的字节数,则需要长达半小时。

我目前的解决方案是尝试接收例如750个字节,然后如果在6-7秒内无法完成,则尝试700个字节,然后650个字节,以此类推,直到我可以快速接收它。我需要解析信息并找到两个特定的短语,因此如果可能的话,在我的telnet连接中执行该操作并仅返回该信息而不是整个屏幕将起作用。我也不需要全部,但我需要尽可能多地接收到的信息,以提高我的信息在该块中的机会,因此我只在我的示例中递减50。

我找不到任何允许您开始阅读某些内容(执行函数)并在一定的时间间隔后退出的功能。如果有人知道如何做到这一点,或者有任何其他解决方案,请告诉我!:)谢谢!

这里是我需要重复的内容:

info = conn:receive(x)

每当它需要超过6秒才能完成时,x都会递减。

点赞
用户1442917
用户1442917

你提出的解决方案看起来有些奇怪,因为处理异步通信有更加直接的方法。首先,你可以使用 settimeout 来限制 sendreceive 调用等待结果的时间(注意,这种情况下 receive 可能会返回部分结果)。第二个选项是使用 select,它允许你在发出阻塞命令之前检查套接字是否有可读/可写的内容。

2015-06-26 16:49:27