0

我想弄清楚如果脚本完成时间超过 1 秒,gwan 会如何响应。

为此,我使用sleep()了示例中的函数hello.c

#include "gwan.h"  
#include <unistd.h>  

int main(int argc, char **argv)  
{  
    sleep(5);
    static char msg[] = "Hello, ANSI C!";  
    xbuf_ncat(get_reply(argv), msg, sizeof(msg) - 1);  
    return 200; // return an HTTP code (200:'OK')
}

正如预期的那样,我从 Chrome 获得的响应时间 >= 5 秒。

然后,我运行了一个 Weighttp 并发测试,这是我从 Chrome 获得的响应时间,单位为 ms(毫秒)。
这是缓存问题吗?5秒的睡眠时间去哪儿了?谢谢。

4

1 回答 1

2

您的sleep(5);测试(充其量)毫无意义,并且正如预期的那样,G-WAN使阻塞脚本超时避免由于脚本错误而阻塞服务器。

如果阻塞 servlet 是在并发下使用的,就像 eyou 稍后所做的那样,那么,G-WAN 不会无意义地超时每次执行(这将需要时间),而是将此 servlet标记为错误并不再执行它。

更有趣的测试不会存在这个阻塞问题:看看 G-WAN 如何在没有阻塞的情况下为10 秒的系统 PING 提供服务。

如果你有一个脚本需要 5 秒来完成它的工作,那么你不应该等待 5 秒。阻塞服务器线程是最不明智的事情。

如果您在另一台服务器上执行此操作,例如使用 Nginx 之类的单线程程序,这只会阻止处理新连接:您的服务器将死机。

G-WAN 做得更好,因为 (a) 它使用多个线程和 (b) 因为它具有专用的异步接口,见下文。

对于跨越很长一段时间的回复,G-WAN 提供:

  1. Comet API(参见comet.c示例)
  2. 流式 API(参见stream1 / 2 / 3 .c 示例)
  3. 一个透明的异步接口,以避免阻塞 I/O。

因此,如果您想了解 G-WAN 如何处理现实生活中的慢速脚本,请编写一些现实的代码。

于 2013-03-04T15:42:57.867 回答