+ -
当前位置:首页 → 问答吧 → 我的S-K-Y Server

我的S-K-Y Server

时间:2010-08-29

来源:互联网

闲着无聊,自己花了暑假的最后半个月写了个Http服务器,给各位看看,帮忙提出一点意见,目前最新版本是beta 1.0版本。
Readme:


QUOTE:
S-K-Y Http 服务器 beta 0.0 - S-K-Y Http 服务器 beta 0.1
        1.增加自动显示首页功能。
        2.增加404 页面无法找到功能。
        3.增加信号捕捉功能, 处理服务器产生的僵死进程。
        4.使服务器的代码更具可读性。
        5.增加了Makefile文件。
S-K-Y Http 服务器 beta 0.1 - S-K-Y Http 服务器 beta 0.3
                        2010年8月20日11:14:02
        1.将进程改成了线程
        2.成功应用线程池技术
S-K-Y Http 服务器 beta 0.3 - S-K-Y Server beta 1.0
                        2010年8月29日19:30:47
        1.正式更名为S-K-Y Server
        2.增加线程列队
        3.将线程池技术更新
        4.独立出了线程池
        5.增加服务器的健壮性,不会轻易崩溃


S-K-Y Server.zip (5.95 KB)
S-K-Y Server
下载次数: 12
2010-08-29 20:25

作者: yylogo   发布时间: 2010-08-29

大概看了下, 功能比较有限, 这也是因为时间太少的缘故. 在解析HTML报文的时候, 思路明显有问题:
  1.         t = recv(sockfd, rcvbuf, sizeof(rcvbuf), 0);
  2.         if(t < 0) {
  3.                 perror("Recv Error");
  4.                 return;
  5.         }
  6.         name = getname(rcvbuf);
复制代码
只进行了一次网络读就开始解析第一行了? 虽然你提供的缓冲区是4096, 但recv可能只接收到一个字节或者少数就返回. 因为你一般在单机测试, 所以几乎不会出现这种情况, 但实际应用网络上出现的概率并不低.

楼主大概思路已经理解了, 但细节还差很多. 代码凑巧能工作, 还需要多学习别人的代码. 再给个建议, 用select来重写一下, 学习面向IO的编程方式.

作者: ideawu   发布时间: 2010-08-29

回复 ideawu


    问问,, 用select做什么? 就只有一个监听套接字要使用吧?

作者: yylogo   发布时间: 2010-08-29

支持,我也想弄一个。

作者: ecjtubaowp   发布时间: 2010-08-29

我也写了一个,支持CGI、Windows/Linux两栖,名为Lws(Light Web Server)

要考虑效率和安全
使用Select是为了防止程序长时间不回应,此时应当结束线程(进程)
不要假定一行少于4096字节,网上什么程序都有,竟然也有针对你的WS的攻击程序
此外,接收时,应当自已进行包的分析重组(TCP,也没什么好重组的,光有分析了)
接收是无法自已控制的,发送则能够了,此时不应当发送0字节的和很少字节的包,而应当对小包进行合并...

除此之外应当增加对Cookie和Byte Range的支持

作者: folklore   发布时间: 2010-08-29

随便翻翻,看到
q_t queue_ex(queue *q)
{
        q_t t;
        lock_lock(&q->lock);
        if(q->lenth == 0){
                return -1;
        }
        t = q->a[--q->lenth];
        lock_unlock(&q->lock);
        return t;
}

return的时候锁没释放

LZ这么小年纪能这样很不错了,鼓励下

作者: hellioncu   发布时间: 2010-08-29