下面将通过这篇文章说明xengine 如何开发http服务,通过此文章 你将学会如何开发一套自己的restful api服务器.而不用第三方服务

下面的演示是基于C C++的版本.你甚至可以用这个库开发一个简单的http服务器

首先,我们需要启动一个Http服务器,下面的代码演示了如何启动一个网络服务器和一个http服务

int main()
{WSADATA st_WSAData;WSAStartup(MAKEWORD(2, 2), &st_WSAData);LPCTSTR lpszMiniFile = _T("./HttpMime.types");LPCTSTR lpszCodeFile = _T("./HttpCode.types");if (!RfcComponents_HttpServer_Init(lpszCodeFile,lpszMiniFile)){printf("%lX\n", HttpServer_GetLastError());return 0;}if (!NetCore_TCPIocp_StartEx(&xhToken)){printf("%lX\n", NetCore_GetLastError());return 0;}NetCore_TCPIocp_RegisterCallBackEx(xhToken, NetCore_CB_Login, NetCore_CB_Recv, NetCore_CB_Close);CreateThread(NULL, 0, NetCore_Thread, NULL, 0, NULL);while (1){Sleep(1000);}NetCore_TCPIocp_DestroyEx(xhToken);RfcComponents_HttpServer_Destroy();WSACleanup();return 0;
}

启动成功后,你需要在网络回调函数里面为http模块函数设置他们对应的操作,比如下面,有用户连接就为http创建这个用户,用用户离开就关闭这个用户,有用户发送数据就把数据投递给http模块来处理,因为基于TCP流的http服务请求包可能会出现截断等多次发送情况,投递给http模块可以让这个模块帮我们处理各种情况

XNETHANDLE xhToken;
BOOL __stdcall NetCore_CB_Login(LPCSTR lpszClientAddr, SOCKET hSocket, LPVOID lParam)
{printf("NetCore_CB_Login:%s\n", lpszClientAddr);RfcComponents_HttpServer_CreateClient(lpszClientAddr);return TRUE;
}
void __stdcall NetCore_CB_Recv(LPCSTR lpszClientAddr, SOCKET hSocket, LPCSTR lpszRecvMsg, int nMsgLen, LPVOID lParam)
{printf("NetCore_CB_Recv:%s-%d\n", lpszClientAddr, nMsgLen);if (!RfcComponents_HttpServer_InserQueue(lpszClientAddr, lpszRecvMsg, nMsgLen)){printf("RfcComponents_WSPacket_Post:%lX\n", HttpServer_GetLastError());}
}
void __stdcall NetCore_CB_Close(LPCSTR lpszClientAddr, SOCKET hSocket, LPVOID lParam)
{printf("NetCore_CB_Close:%s\n", lpszClientAddr);RfcComponents_HttpServer_CloseClinet(lpszClientAddr);
}

最后我们需要一个线程来处理http请求,http请求是 请求-应答模式,所以我们处理完一个请求后,需要回复给对方,这里我们返回了一个hello world给对方.

DWORD WINAPI NetCore_Thread(LPVOID lParam)
{while (TRUE){if (RfcComponents_HttpServer_EventWait()){int nMsgLen = 20480;RFCCOMPONENTS_HTTP_REQPARAM st_ReqParam;TCHAR tszMsgBuffer[20480];TCHAR tszClientAddr[64];list<tstring> stl_ListHdrField;memset(&st_ReqParam, '\0', sizeof(RFCCOMPONENTS_HTTP_REQPARAM));memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer));memset(tszClientAddr, '\0', sizeof(tszClientAddr));if (RfcComponents_HttpServer_GetRandom(tszClientAddr, &stl_ListHdrField, &st_ReqParam, tszMsgBuffer, &nMsgLen)){printf("%s %d:%s\n", tszClientAddr, nMsgLen, tszMsgBuffer);RFCCOMPONENTS_HTTP_HDRPARAM st_HdrParam;memset(&st_HdrParam, '\0', sizeof(RFCCOMPONENTS_HTTP_HDRPARAM));st_HdrParam.bIsClose = TRUE;st_HdrParam.nHttpCode = 200;RfcComponents_HttpServer_SendMsg(tszMsgBuffer, &nMsgLen, &st_HdrParam, _T("hello world"), 11);NetCore_TCPIocp_SendEx(xhToken, tszClientAddr, tszMsgBuffer, nMsgLen);}}Sleep(1);}return 0;
}

当然,你可以通过这个函数做更多东西,比如,请求的url可以通过我们的代码得到.一个restful api 服务器需要通过url 和 内容来确定返回什么内容.比如,我们在浏览器里面输入 http://127.0.0.1:5001/api/gethello  服务器会给我们返回hello world 这个就是一个restful api的处理流程

更多的处理流程还可以通过负载json的请求,然后我们通过解析json请求的内容,tszMsgBuffer 就是http 的body 部分,nmsglen 表示tszMsgBuffer 的大小.,通过负载的内容来处理更多内容.我们设置还可以得到http的头字段,stl_ListHdrField 通过这个stl来得到有多少字段然后解析即可.

当然,功能不止这一点,你可以下载后自行研究.

下载地址:https://download.csdn.net/download/aaadddzxc/15204392

c c++实现restful api服务 c c++实现http服务相关推荐

  1. App后台开发运维和架构实践学习总结(2)——RESTful API设计技巧

    前言 移动互联网时代,RESTful API成为越来越重要的移动端和服务器端交互的形式.尤其是在很多互联网公司或者传统行业拥抱移动互联网的时候,一套设计良好的Restful API能够帮助互联网产品支 ...

  2. 在Spring MVC框架下利用RESTful API和MongoDB实现用户留言与邮件反馈

    在Spring MVC框架下,基于注解映射和数据绑定编写Java业务代码,采用MongoDB数据库进行数据存储,使用JSP和JS渲染表单页面,利用RESTful API实现基于URL的请求处理服务,以 ...

  3. principles of good restful api design(中文)

    好的restful API设计很难!API代表了你和使用你的数据的人之间的契约.如果打破这个契约将会带来很多愤怒的邮件,导致大量使用移动app的人因不能使用很悲伤.而文档仅仅是成功的一半,并且很难找到 ...

  4. 微服务(Microservices)和服务网格(Service Mesh)架构概念整理

    微服务(Microservices) 在过去的 2016 年和 2017 年,微服务技术迅猛普及,和容器技术一起成为这两年中最吸引眼球的技术热点.而以 Spring Cloud 为代表的传统侵入式开发 ...

  5. 启动服务错误5拒绝访问_【Go API 开发实战 5】基础1:启动一个最简单的 RESTful API 服务器...

    启动一个最简单的 RESTful API 服务器 本节核心内容 启动一个最简单的 RESTful API 服务器 设置 HTTP Header API 服务器健康检查和状态查询 编译并测试 API 本 ...

  6. Docker——基于HubServing部署全套PaddleOCR Restful API服务(CPU版本)

    说明 1.同时部署ocr_det.ocr_cls.ocr_rec.ocr_system 2.基于https://gitee.com/paddlepaddle/PaddleOCR/blob/v2.0.0 ...

  7. Spring Cloud——基于OpenFeign调用PaddleOCR的Restful API服务解决方案

    PaddleOCR的Restful API服务部属 Docker化部署服务 PaddleOCR--Docker环境下基于HubServing模式部署Restful API服务(CPU版本) Maven ...

  8. PaddleOCR——Docker环境下基于HubServing模式部署Restful API服务(CPU版本)

    Docker环境下基于HubServing模式部署Restful API服务(CPU版本) 在日常项目应用中,相信大家一般都会希望能通过Docker技术,把PaddleOCR服务打包成一个镜像,以便在 ...

  9. pycharm构建虚拟环境_10分钟,带你用Python构建RESTful API 服务

    1. 前言 上一篇文章,介绍了使用 Java + Spring Boot + MyBatis 构建 RESTful API 的详细步骤:很多小伙伴表示,更愿意用 Python 编写 RESTful A ...

  10. python︱微服务Sanic制作一个简易本地restful API

    文章目录 一.Snaic基本功能 1.Routing路由 1.1 传入参数且参数格式规定 1.2 路由的第二种写法 2.Request 请求 3.Response 3.1 文本格式 3.2 HTML ...

最新文章

  1. 地址本在不同手机间的迁移
  2. Tensorflow深度学习之十二:基础图像处理之二
  3. libjpeg的问题
  4. 关于Django中JsonResponse返回中文字典编码错误的解决方案
  5. NSRunloop小总结
  6. TortoiseGit 单文件版本提交记录查看_入门试炼_08
  7. 2020 年 3 月全国程序员工资排名!
  8. java 搭建个人博客_Spring boot 搭建个人博客系统(一)——整体思路
  9. 电脑安装python3.74_在Python3.74+PyCharm2020.1 x64中安装使用Kivy的详细教程
  10. Particle Filter Tutorial 粒子滤波:从推导到应用(四)
  11. 现外供电电压都达240V,音响系统要不要加稳压器?
  12. 2018贝壳找房研发校招笔试题
  13. MITRE 发布“2021年最重要的硬件弱点”榜单
  14. 华三H3c 交换机 vlan Hybird端口配置
  15. PHP下ajax跨域的解决方案之window.name
  16. 【数学建模】传染病SIR模型
  17. Maven dependencyManagement 详解
  18. (2021.10.25-10.31)小结
  19. 平板电脑:apple、中国挑大梁
  20. ImageMagick将多张图片拼接成一张图片_爱剪辑如何把图片制作成视频

热门文章

  1. [Win10] [C# Desktop] 两种方法发送原生Toast通知
  2. 手机(局域网)远程连接 windows电脑
  3. 概要设计和详细设计模板_超详细的【免试拼】铝模板设计深化配模方案 非筑名铝模板设计...
  4. VMwares设置共享文件夹
  5. android apk 永久root,Android 实现永久性开启adb 的root权限
  6. 怎样写一个拼写检查器-贝叶斯-python
  7. 毕业设计-基于微信小程序的“助农”销售系统
  8. web应用登录,报错空指针java.lang.NullPointerException问题--可能的解决方式
  9. Xilinx SDx尝鲜之下载安装
  10. spark 概述与安装