首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >休眠gwan服务器脚本的响应时间

休眠gwan服务器脚本的响应时间
EN

Stack Overflow用户
提问于 2013-03-04 21:24:48
回答 1查看 233关注 0票数 0

我想知道如果脚本花了超过1秒的时间,gwan会如何响应。

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

代码语言:javascript
复制
#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秒的睡眠时间到哪里去了?谢谢。

EN

回答 1

Stack Overflow用户

发布于 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提供:

  1. a Comet API (参见comet.c示例)
  2. a streaming API (参见stream1/2/3.c示例)
  3. a透明异步接口以避免阻塞I/O。

因此,如果您想了解G-WAN是如何处理现实生活中运行缓慢的脚本的,那么可以编写一些实际的代码。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15202597

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档