请教:lighttpd下用C语言编写CGI程序,如何实现大文件下载?

lzw8114 2013-12-21 10:55:13
我现在在嵌入式linux环境中使用lighttpd+C语言编写CGI程序,测试发现:

在客户端网页下载小文件没问题,但下载几十兆甚至上百兆的大文件时,服务器端CGI进程会出现内存溢出而被杀掉,此时客户端网页再也无法访问,必须重启lighttpd服务进程才能恢复。

我在网上查了一周了,也做了些实验,但仍然无法解决该问题。

网上有人用php或者Ruby写fastcgi,使用了lighttpd的X-sendfile功能,可以支持大文件下载。但我一直没查到c语言写的cgi程序如何支持大文件下载。

希望知道的朋友能帮助解答!
感激不尽!!!
...全文
4308 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lzw8114 2014-01-06
  • 打赏
  • 举报
回复
因为客户端要下载大文件,还要能断点续传,请问lighttpd如何实现?
lzw8114 2014-01-06
  • 打赏
  • 举报
回复
非常感谢u013250968! 您发的网址我也找到了,大文件下载没办法只能用fastcgi的X-LIGHTTPD-send-file做了,但还有个更棘手的问题需要请教,就是X-LIGHTTPD-send-file不支持断点续传,这个lighttpd如何支持?因为一次下载文件内数据过多还是会出现内存溢出的问题。
跳舞的熊 2014-01-02
  • 打赏
  • 举报
回复
http://redmine.lighttpd.net/projects/1/wiki/X-LIGHTTPD-send-file
lzw8114 2013-12-21
  • 打赏
  • 举报
回复
我具体说一下实现过程,希望做过的朋友详细说明如何修改: 1.在客户端网页点击视频文件,调用服务器端download.cgi程序下载该文件; 2.服务器端lighttpd收到客户端传来的download.cgi命令后,调用download.cgi; 3.download.cgi启动后,首先写一段特定信息到stdout,然后将客户端要获取的视频文件循环写入stdout; 4.lighttpd从stdout中读取特定信息和视频文件信息并发送到客户端; 5.客户端网页浏览器收到特定信息后弹出保存文件窗口; 6.用户选择保存位置后,客户端网页浏览器开始接收lighttpd发来的视频文件信息并写入本地文件;
xuzuning 2013-12-21
  • 打赏
  • 举报
回复
减少每次读取的数据块 另外你还需要有断点续传的功能。你总不能假定在大文件传输中,网络或用户端不会出现问题吧

2,204

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 CGI
社区管理员
  • CGI社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧