我的S-K-Y Server
时间:2010-08-29
来源:互联网
闲着无聊,自己花了暑假的最后半个月写了个Http服务器,给各位看看,帮忙提出一点意见,目前最新版本是beta 1.0版本。
Readme:
S-K-Y Server.zip (5.95 KB)
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.增加服务器的健壮性,不会轻易崩溃
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.增加服务器的健壮性,不会轻易崩溃

作者: yylogo 发布时间: 2010-08-29
大概看了下, 功能比较有限, 这也是因为时间太少的缘故. 在解析HTML报文的时候, 思路明显有问题:
复制代码
只进行了一次网络读就开始解析第一行了? 虽然你提供的缓冲区是4096, 但recv可能只接收到一个字节或者少数就返回. 因为你一般在单机测试, 所以几乎不会出现这种情况, 但实际应用网络上出现的概率并不低.
楼主大概思路已经理解了, 但细节还差很多. 代码凑巧能工作, 还需要多学习别人的代码. 再给个建议, 用select来重写一下, 学习面向IO的编程方式.
- t = recv(sockfd, rcvbuf, sizeof(rcvbuf), 0);
- if(t < 0) {
- perror("Recv Error");
- return;
- }
- name = getname(rcvbuf);
楼主大概思路已经理解了, 但细节还差很多. 代码凑巧能工作, 还需要多学习别人的代码. 再给个建议, 用select来重写一下, 学习面向IO的编程方式.
作者: ideawu 发布时间: 2010-08-29
回复 ideawu
问问,, 用select做什么? 就只有一个监听套接字要使用吧?
问问,, 用select做什么? 就只有一个监听套接字要使用吧?
作者: yylogo 发布时间: 2010-08-29
支持,我也想弄一个。
作者: ecjtubaowp 发布时间: 2010-08-29
我也写了一个,支持CGI、Windows/Linux两栖,名为Lws(Light Web Server)
要考虑效率和安全
使用Select是为了防止程序长时间不回应,此时应当结束线程(进程)
不要假定一行少于4096字节,网上什么程序都有,竟然也有针对你的WS的攻击程序
此外,接收时,应当自已进行包的分析重组(TCP,也没什么好重组的,光有分析了)
接收是无法自已控制的,发送则能够了,此时不应当发送0字节的和很少字节的包,而应当对小包进行合并...
除此之外应当增加对Cookie和Byte Range的支持
要考虑效率和安全
使用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这么小年纪能这样很不错了,鼓励下
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
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28