首页 文章 精选 留言 我的

精选列表

搜索[Web安全],共10000篇文章
优秀的个人博客,低调大师

C++ Web 框架 Paozhu 1.10.0 发布

经过一个多月努力,框架终于加上了WebSocket client,面对物联网还加上了Socket server 和Socket client,也加上了RPC server and client,优化了httpclient,优化了很多小细节。 下面是websocket server例子,支持协程和同步方式。 class loopwebsockets : public websockets_api { public: loopwebsockets(unsigned int m, unsigned int g) : websockets_api(8, m, g, 0) {} ~loopwebsockets() { std::cout << "~loopwebsockets" << std::endl; } public: void onopen() override { isco=true; loop_num = 8; std::cout << "onopen" << std::endl; } void onclose() override { isclose = true; std::cout << "onclose" << std::endl; } void onpong() override {} void run_loop() override { if (session_sock) { std::cout << "timeloop:" << std::endl; std::string aa = "test run_loop"; std::string outhello; ws_parse->makeWSText(aa, outhello); session_sock->send_data(outhello); // peer->send(aa); if (loop_num == 4) { loop_num = 0; return; } loop_num--; } else { isclose = true; loop_num = 0; std::cout << "session_sock is die!" << std::endl; } } asio::awaitable<void> async_run_loop() override { if (session_sock) { std::cout << "async timeloop:" << std::endl; std::string aa = "test async_run_loop"; std::string outhello; ws_parse->makeWSText(aa, outhello); session_sock->send_data(outhello); // peer->send(aa); if (loop_num == 4) { loop_num = 0; co_return; } loop_num--; } else { isclose = true; loop_num = 0; std::cout << "session_sock is die!" << std::endl; } co_return; } void onfiles(std::string_view filename) override { std::cout << "--------onfiles:--------" << filename << std::endl; } asio::awaitable<void> async_onfiles(std::string_view filename) override { std::cout << "--------onfiles:--------" << filename << std::endl; co_return; } asio::awaitable<void> async_onmessage(std::string_view data) override { std::string outhello; ws_parse->makeWSText(data, outhello); co_await session_sock->co_send_writer(outhello); co_return; } void onmessage(std::string_view data) override { if (session_sock) { std::string outhello; ws_parse->makeWSText(data, outhello); session_sock->send_data(outhello); } } }; websocket client端例子 //@urlpath(null,test_websocket_client) asio::awaitable<std::string> test_websocket_client(std::shared_ptr<httppeer> peer) { httppeer &client = peer->get_peer(); client << " hello world! this is a test test_socket_client function. "; std::shared_ptr<http::websocket_client> a = std::make_shared<http::websocket_client>(); std::string send_content; bool isok = co_await a->async_connect("ws://127.0.0.1:80/wstest"); // a->set_url("127.0.0.1/wstest"); // a->set_port(80); //bool isok = co_await a->async_connect(); if(!isok) { client << " <hr> async_connect error."; co_return ""; } isok =co_await a->websocket_handshake(); if(!isok) { client << a->error_msg; client << " <hr> websocket_handshake error."; co_return ""; } send_content="websocket client"; std::string outdata; a->make_ws_text(send_content,outdata); unsigned int n = co_await a->async_write(outdata); client << " <hr >send:"<<n; //end echo http client //Let the websocket client run alone in the background a->async_dur_time_loop_fun = [](std::shared_ptr<websocket_client> b)-> asio::awaitable<void> { std::string send_content="websocket client loop"; std::string outdata; b->make_ws_text(send_content,outdata); unsigned int n = co_await b->async_write(outdata); if(n == outdata.size()) { } co_return; }; //read loop a->async_recv_finish_fun = [](std::shared_ptr<websocket_client> b)-> asio::awaitable<void> { if(b->recv_data.length > 0) { } co_return; }; a->async_run_loop_fun = [](std::shared_ptr<websocket_client> b, unsigned int n)-> asio::awaitable<void> { b->process_data(b->data, n); if(b->recv_data.isfinish) { if(b->async_recv_finish_fun != nullptr) { co_await b->async_recv_finish_fun(b); } b->reset_recv_status(); } co_return; }; co_spawn(a->strand_, [a]() mutable { return a->async_run_loop(); }, asio::detached); //if not set time out, must add to client task loop a->add_client_task_loop(); co_return ""; } 1.特性***** ✅ 1. 自带json编解码不用第三方库,标准json支持 ✅ 2. 支持多域名网站 ✅ 3. 支持多域名ssl 服务端 ✅ 4. 支持http/1.1、http/2协议 ✅ 5. 支持WebSocket服务端和客户端,双工收发 ✅ 6. 框架自带WebSocket推送,支持定时推送到WebSocket客户端 ✅ 7. 支持httpclient get post,同步异步、协程模式,数据采集 ✅ 8. 框架自带ORM,使用链接池方式,目前支持MySQL,支持协程和同步模式 ✅ 9. 框架自带线程池,和用户代码运行的线程池 ✅10. 框架使用asio自带的协程 ✅11. 框架特色是I/O 使用协程池 用户代码运行使用线程池,类似GO那种调度,只是针对http请求调度 ✅12. 框架支持普通文件gzip、br,并支持缓存到磁盘,下次不用cpu再压缩 ✅13. URL、POST和上传文件,解析结果client.get[] client.post[] client.files[]方式获取内容 ✅14. 自带sendmail类库 ✅15. 生成二维码(qrcode),需要gd、qrencode库 ✅16. 插件化编程,热动态更新,使用动态库方式 ✅17. 框架内置通用数据缓存模块,ORM结果缓存,提高并发能力 ✅18. 框架controller目录注解功能,方便添加URL路由映射,降低入门心智 ✅19. 结构和类注解JSON功能,使用json_encode json_decode操作复杂C++结构体和JSON互转,可以参考Wiki ✅20. 提供一个完整admin后台管理框架(见后面图片), 访问URL为 /admin/main ✅21. 支持PHP-FPM fastcgi运行模式,代替Apache做PHP前端,让PHP程序员平稳过渡到 C++ 开发模式 ✅22. 内置微信小程序支付功能 ✅23. 支持Socket服务端和客户端,支持Socket ssl连接 ✅24. 支持RPC服务端和客户端,使用http注册的URL函数 https://github.com/hggq/paozhu

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册