我想知道如果脚本花了超过1秒的时间,gwan会如何响应。
为此,我在hello.c示例中使用了sleep()函数:
#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获得的响应时间(毫秒)。
这是缓存问题吗?5秒的睡眠时间到哪里去了?谢谢。
发布于 2013-03-04 23:42:58
您的sleep(5);测试是毫无意义的(充其量是),正如预期的那样,G-WAN 会使阻塞脚本超时,以避免因为有buggy的脚本而阻塞服务器。
如果阻塞servlet是在并发模式下使用的,就像您稍后所做的那样,那么,G-WAN会将这个servlet标记为有out,并且不再执行它,而不是毫无意义地使每次执行超时(这将花费时间)。
这个阻塞问题不会存在于一个更有趣的测试中:看看G-WAN如何在没有阻塞的情况下为10-second system PING服务。
如果你有一个脚本需要5秒来完成它的工作,那么你不应该等待5秒。阻塞服务器线程是最不明智的做法。
如果你在另一台服务器上这样做,比如说,使用像Nginx这样的单线程程序,这只会阻止新的连接被处理:你的服务器将死掉。
G-WAN做得更好,因为(a)它使用了几个线程,(b)因为它有专用的异步接口,见下文。
对于持续较长时间的回复,G-WAN提供:
因此,如果您想了解G-WAN是如何处理现实生活中运行缓慢的脚本的,那么可以编写一些实际的代码。
https://stackoverflow.com/questions/15202597
复制相似问题