当前位置: 首页 > news >正文

建筑做文本网站网站哪个公司好

建筑做文本网站,网站哪个公司好,wordpress投票,网站做一样的算侵权么往期教程 如果觉得写的可以,请给一个点赞关注支持一下 观看之前请先看,往期的博客教程,否则这篇博客没办法看懂 workFlow c异步网络库编译教程与简介 C异步网络库workflow入门教程(1)HTTP任务 C异步网络库workflow系列教程(2)redis任务 workflow系列教程(3)Series串联任务流…往期教程 如果觉得写的可以,请给一个点赞关注支持一下 观看之前请先看,往期的博客教程,否则这篇博客没办法看懂 workFlow c异步网络库编译教程与简介 C异步网络库workflow入门教程(1)HTTP任务 C异步网络库workflow系列教程(2)redis任务 workflow系列教程(3)Series串联任务流 workflow系列教程(4)Parallel并联任务流 创建与启动http server 本示例里我们采用http server的默认参数。创建和启动过程非常简单。 process为设置的异步回调函数server.start(port):中port参数表示监听的端口号 WFHttpServer server(process); if (server.start(port) 0) {pause();server.stop(); }start()接口有好几个重载函数在WFServer.h里可以看到如下一些接口 class WFServerBase { public:/* To start TCP server. */int start(unsigned short port);int start(int family, unsigned short port);int start(const char *host, unsigned short port);int start(int family, const char *host, unsigned short port);int start(const struct sockaddr *bind_addr, socklen_t addrlen);/* To start an SSL server */int start(unsigned short port, const char *cert_file, const char *key_file);int start(int family, unsigned short port,const char *cert_file, const char *key_file);int start(const char *host, unsigned short port,const char *cert_file, const char *key_file);int start(int family, const char *host, unsigned short port,const char *cert_file, const char *key_file);int start(const struct sockaddr *bind_addr, socklen_t addrlen,const char *cert_file, const char *key_file);/* For graceful restart or multi-process server. */int serve(int listen_fd);int serve(int listen_fd, const char *cert_file, const char *key_file);/* Get the listening address. Used when started a server on a random port. */int get_listen_addr(struct sockaddr *addr, socklen_t *addrlen) const; };这些接口都比较好理解。任何一个start函数当端口号为0时将使用随机端口。此时用户可能需要在server启动完成之后通过get_listen_addr获得实际监听地址。 http echo server的业务逻辑 我们看到在构造http server的时候传入了一个process参数这也是一个std::function定义如下 using http_process_t std::functionvoid (WFHttpTask *); using WFHttpServer WFServerprotocol::HttpRequest, protocol::HttpResponse;template WFHttpServer::WFServer(http_process_t proc) :WFServerBase(HTTP_SERVER_PARAMS_DEFAULT),process(std::move(proc)) { }其实这个http_proccess_t和的http_callback_t类型是完全一样的。都是处理一个WFHttpTask。 对server来讲我们的目标就是根据request填写好response。 同样我们用一个普通函数实现process。逐条读出request的http header写入html页面。 void process(WFHttpTask *server_task) {protocol::HttpRequest *req server_task-get_req();protocol::HttpResponse *resp server_task-get_resp();long seq server_task-get_task_seq();protocol::HttpHeaderCursor cursor(req);std::string name;std::string value;char buf[8192];int len;/* Set response message body. */resp-append_output_body_nocopy(html, 6);len snprintf(buf, 8192, p%s %s %s/p, req-get_method(),req-get_request_uri(), req-get_http_version());resp-append_output_body(buf, len);while (cursor.next(name, value)){len snprintf(buf, 8192, p%s: %s/p, name.c_str(), value.c_str());resp-append_output_body(buf, len);}resp-append_output_body_nocopy(/html, 7);/* Set status line if you like. */resp-set_http_version(HTTP/1.1);resp-set_status_code(200);resp-set_reason_phrase(OK);resp-add_header_pair(Content-Type, text/html);resp-add_header_pair(Server, Sogou WFHttpServer);if (seq 9) /* no more than 10 requests on the same connection. */resp-add_header_pair(Connection, close);struct sockaddr_in addr;socklen_t len sizeof(addr);serverTask-get_peer_addr((sockaddr *)addr,len);if(addr.sin_family AF_INET){fprintf(stderr,sin_family:AF_INET\n);fprintf(stderr,ip:%s\n, inet_ntoa(addr.sin_addr));fprintf(stderr,port:%d\n,ntohs(addr.sin_port));} }set_http_version设置http版本set_status_code设置状态码set_reason_phrase设置响应dui’x 大多数HttpMessage相关操作之前已经介绍过了在这里唯一的一个新操作是append_output_body()。 显然让用户生成完整的http body再传给我们并不太高效。用户只需要调用append接口把离散的数据一块块扩展到message里就可以了。 append_output_body()操作会把数据复制走另一个带_nocopy后缀的接口会直接引用指针使用时需要注意不可以指向局部变量。 相关几个调用在HttpMessage.h可以看到其声明 class HttpMessage { public:bool append_output_body(const void *buf, size_t size);bool append_output_body_nocopy(const void *buf, size_t size);...bool append_output_body(const std::string buf); };再次强调使用append_output_body_nocopy()接口时buf指向的数据的生命周期至少需要延续到task的callback。 函数中另外一个变量seq通过server_task-get_task_seq()得到表示该请求是当前连接上的第几次请求从0开始计。 程序中完成10次请求之后就强行关闭连接于是 if (seq 9) /* no more than 10 requests on the same connection. */resp-add_header_pair(Connection, close);关闭连接还可以通过task-set_keep_alive()接口来完成但对于http协议还是推荐使用设置header的方式。 这个示例中因为返回的页面很小我们没有关注回复成功与否。
http://www.w-s-a.com/news/953265/

相关文章:

  • 上海商务网站建设如何做的网站手机可以用吗
  • 产品推广营销方案seo推广员招聘
  • 做水利网站需要多少钱山东市网站建设
  • 做网站找哪里如何修改wordpress颜色
  • 招商加盟网站系统站长工具 seo查询
  • 工商局网站清算组备案怎么做电商培训机构
  • 做好门户网站建设做本地团购网站怎么样
  • wordpress主题和预览不同20条优化防疫措施方案
  • 艾奇视觉网站建设网站推广需要几个人做
  • 2008 iis 添加网站wordpress固定链接标签加上页面
  • 宁波企业网站制作推荐网站优化人员
  • 大型资讯门户网站怎么做排名沈阳建设工程有限公司
  • 开发中英文切换网站如何做江苏网站建设费用
  • 网站论文首页布局技巧桥东网站建设
  • 网站开发项目经理工资北京微信网站
  • 山西山西省建设厅网站微信备份如何转换为wordpress
  • 同城网站开发实用网站模板
  • 郑州做网站哪家公司好国外购买空间的网站有哪些
  • 资讯cms网站有那些餐饮品牌策划设计公司
  • 网站策划选题网站布局优化
  • 网站建设3000字wordpress 微信 主题制作
  • 代做寄生虫网站网站菜单效果
  • 网站备案为什么这么慢目录更新 wordpress
  • 视频在线制作网站Wordpress 外链图片6
  • 网站域名后缀有什么用网站建设的投资预算怎么写
  • 化妆品网站建设网站惠州网站关键字优化
  • 保定网站制作企业下载天眼查企业查询官网
  • 中山企业网站建设公司制作一个景点的网站
  • 连云港集团网站建设株洲建设网站
  • 做运动鞋评价的网站南山做网站联系电话