【问题标题】:How to handle timeout periods in Rebol 3 schemes如何处理 Rebol 3 方案中的超时时间
【发布时间】:2013-01-28 05:29:37
【问题描述】:

在 Rebol 3 中启动异步 IO 事件系统的常用方法是在端口上等待。为了检查超时,将方案中的一个值添加到等待块中。

wait [port timeout]

但小电子邮件的默认超时可能不适用于数兆字节的文件。

处理此问题的最佳方法是什么?如果您仍在接收数据,是否可以在脚本接收数据时更新等待列表,以免不必要地超时?

【问题讨论】:

    标签: networking rebol rebol3


    【解决方案1】:

    我认为端口超时应该基于数据包计时触发,而不是完整请求。因此,在电子邮件上设置 30 秒的超时时间意味着您在 30 秒内没有收到数据包。

    由于数据包往往很小,它们会很快到达,并且长时间不接收将表明网络/服务器出现故障,您希望获得超时。 (例外情况是发生数据包聚合时,但仍然不会有太多聚合,以至于通常会出现很长的延迟。)

    说了这么多,我不确定它们是否在 R3 中实现。根据之前的评论,我猜不是。网络系统是我为 R3 编写的第一批部分之一,它简洁而简陋,但肯定需要一些关注。

    【讨论】:

      【解决方案2】:

      看起来这还没有实现。在这篇文章http://www.rebol.net/wiki/Ports_and_Schemes:_Issues 第 9 期:超时,Carl 说

      设备模型实现的低级端口已经包括 超时功能。它当前未启用,但需要启用。 这将满足 CONNECT 或 READ 及其相关的超时。此方法不使用一般 定时器端口,因为较低级别的端口设备会出现问题 对这样的端口进行更高级别的调用。

      在更高级别,我们一直计划提供一个 TIMER 方案 对于这样的端口。应该可以公平地提供它 很快,因为基本的时序代码和内核级唤醒 机制已经实现(针对 Win32 系统 API)。

      【讨论】:

        【解决方案3】:

        循环怎么样? 如果magic-port-has-data,永远[等待[端口1]?端口 [进程] ]

        【讨论】:

        • 我认为 tcp:// 方案应该以某种方式处理这个问题。我注意到http方案也有同样的问题..尝试下载一个大文件并看到它超时错误。
        • 试过了。根据 rebol.net/wiki/Port_Examples#Read_all_of_large_file,查找“;!!” gist.github.com/4686849
        • 当然,您已经设置了自己的异步处理程序,但是 http 方案中的默认“读取”会超时。所以,我要问的是,是否有提议自动处理这个问题,而不是要求用户设置自己的处理程序。
        • 我很困惑。默认的 'read 会自己等待。由于您自己等待,因此我认为您以异步方式进行。我如何使用“阅读”并仍然自己等待? '读取超时是一个错误恕我直言,它应该因为滞后而超时,而不是在连接运行良好时。
        • http 方案中的默认读取检查是否安装了默认处理程序。如果是这样,它会使用它来给人一种同步动作的印象,并且在那里等待启动。如果您使用自己的处理程序,并且不像示例中那样在连接时发送请求,那么您可以在读取时等待。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-09-25
        • 2016-04-02
        • 1970-01-01
        • 1970-01-01
        • 2014-03-27
        • 2016-12-04
        • 2012-08-18
        相关资源
        最近更新 更多