线程中的C或C HTTP守护进程?

前端之家收集整理的这篇文章主要介绍了线程中的C或C HTTP守护进程?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用FreeRTOS启动新的嵌入式系统设计.我的最后一个使用了eCos,它有一个非常轻量级的内置HTTP服务器,特别是因为我没有文件系统.简而言之,它的工作方式是每个页面都是类似CGI的C函数,在HTTP守护程序需要时调用它.具体来说,您可以编写以下形式的函数
int MyWebPage(FILE* resp,const char* page,const char* params,void* uData);

其中page是url的page部分,params是任何表单参数(只支持GET,而不是POST,这会阻止文件上传,从而使flash变得很痛苦),uData是传入的令牌,当你注册时设置函数,因此您可以使用相同的函数为多个URL或具有不同数据的范围提供服务,而resp是一个文件句柄,您可以将HTTP响应(标题和所有)写入.

然后你注册了这个函数

CYG_HTTPD_TABLE_ENTRY(www_myPage,"/",MyWebPage,0);

其中CYG_HTTPD_TABLE_ENTRY是一个宏,其中第一个参数是变量名,第二个是页面URL(允许使用*通配符;因此页面传递给MyWebPage()),第三个是函数指针,最后一个是uData值.

这是一个简单的例子:

int HelloWorldPage(FILE* resp,const char*,void*)
{
    fprintf("Content-Type: text/html;\n\n");
    fprintf("<html><head><title>Hello World!</title></head>\n");
    fprintf("<body>\n");
    fprintf("<h1>Hello,World!</h1>\n");
    fprintf("<p>You passed in: %s</p>\n",params);
    fprintf("</body></html>\n");
}
CYG_HTTPD_TABLE_ENTRY(www_hello,HelloWorldPage,0);

(实际上,params将通过一个函数来逃避HTML魔术字符,我会使用另外几个函数来分割参数并从中创建一个< ul>,但为了清楚起见,我把它留了下来.)

服务器本身只是作为一个任务(即线程)运行,只要它的优先级低于关键任务,就不会妨碍它.

不用说,这对于测试和调试来说非常宝贵. (嵌入式工作的一个问题是你通常不能将XTerm作为日志使用.)因此,当Supreme Programmer反复指责我没有工作的东西时(我猜是阻力最小的路径),我可以把网页并显示他向我发送了错误的参数.在集成中节省了大量的调试时间.

所以无论如何…我想知道,有这样的东西作为一个独立的图书馆吗?我可以链接的东西,注册我的回调,产生一个线程,并让它做魔术?或者我需要自己动手?我更喜欢C,但也可以使用C库.

编辑:由于我正在给它一个赏金,我需要澄清该库需要在开源许可下.

解决方法

我建议你看一下libmicrohttpd,嵌入式web服务器:

> http://www.gnu.org/software/libmicrohttpd/

它体积小,速度快,具有简单的C API,支持多线程,适用于嵌入式系统,支持POST,可选支持SSL / TLS,可在LGPL或eCos许可下使用(视情况而定).我相信这符合您的所有要求.如果你愿意,在C语言中包装它将是微不足道的.

猜你在找的C&C++相关文章