在 Rebol 3 中启动异步 IO 事件系统的常用方法是在端口上等待。为了检查超时,将方案中的一个值添加到等待块中。
wait [port timeout]
但是,小电子邮件消息的默认超时可能不适用于数兆字节的文件。
处理这个问题的最佳方法是什么?如果您仍在接收数据,是否可以在脚本接收数据时更新等待列表,以免不必要地超时?
在 Rebol 3 中启动异步 IO 事件系统的常用方法是在端口上等待。为了检查超时,将方案中的一个值添加到等待块中。
wait [port timeout]
但是,小电子邮件消息的默认超时可能不适用于数兆字节的文件。
处理这个问题的最佳方法是什么?如果您仍在接收数据,是否可以在脚本接收数据时更新等待列表,以免不必要地超时?
我认为端口超时应该基于数据包计时触发,而不是完整请求。因此,在电子邮件上设置 30 秒的超时时间意味着您在 30 秒内没有收到数据包。
由于数据包往往很小,它们会很快到达,并且长时间不接收将表明网络/服务器故障,您希望获得超时。(例外情况是发生数据包聚合时,但仍然不会有太多聚合,以至于通常会出现长延迟。)
说了这么多,我不确定它们是否在 R3 中实现。根据之前的评论,我猜不是。网络系统是我为 R3 编写的第一批部分之一,它精简而简陋,但肯定需要一些关注。
看起来这还没有实现。在这篇文章http://www.rebol.net/wiki/Ports_and_Schemes:_Issues issue 9: timeouts 中,Carl 说
设备模型实现的低级端口已经包含超时功能。它当前未启用,但需要启用。这将满足 CONNECT 或 READ 等操作及其相关超时的第一个要求。此方法不使用通用计时器端口,因为较低级别的端口设备在对此类端口进行较高级别的调用时会遇到问题。
在更高级别,我们一直计划为此类端口提供 TIMER 方案。应该可以很快提供它,因为基本的计时代码和内核级唤醒机制已经实现(对于 Win32 系统 API)。
一个循环怎么样?如果magic-port-has-data,永远[等待[端口1]?端口 [进程] ]