iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > html >怎么使用jwEngine框架
  • 688
分享到

怎么使用jwEngine框架

2024-04-02 19:04:59 688人浏览 八月长安
摘要

本篇文章为大家展示了怎么使用jwEngine框架,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。jwEngine一个跨平台的c++<->lua服务器快速解

本篇文章为大家展示了怎么使用jwEngine框架,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

jwEngine

一个跨平台的c++<->lua服务器快速解决方案,该框架即可快速响应服务器开发工作,设计思想:“让事情变得更简单”

网络底层采用libuv(node.js底层库),异步io助力使单线程也能释放澎湃动力,跨平台支持epoll、iocp、ipv6。框架支持tcp、udp/kcp、websocketHttp,并保证了接口的一致性,使用了sol2将所有接口都导出到lua,可以选择用lua开发逻辑。

使用modern c++开发,尽可能的使用std::move、std::string_view减少内存复制。

该框架使用异步事件,不建议使用多线程,避免多线程上下文切换开销和破坏代码美感,网络部分和逻辑部分使用一个主事件循环驱动。建议的方案是多进程单线程的横向扩展,按照业务控制各个进程的粒度,当然MysqlRedis可以加入到线程池中。

创建一个tcp服务器

只需要简单几行代码即可创建一个tcp高性能服务器,并自动处理数据包头和粘包(其中包头包含消息长度和协议号),构建一个完好的NetPacket交给你。

class INetEvent : public NetEvent { public:   virtual void onAccept(NetConnect * conn){}   virtual void onClose(NetConnect * conn){}   virtual void onMsg(NetConnect * conn, int msgtype, NetPacket * pack){} };  int main() {   EventLoop::Instance()->init();    INetEvent eve;   NetServer server(EventLoop::Instance(), &eve);   server.listen("127.0.0.1", 3001);    return EventLoop::Instance()->run(); }

创建一个kcp服务器

c++的kcp服务器示例,快速构建你的帧同步服务器,保证消息的可靠性

class KNetEvent : public KcpEvent { public:   virtual void onAccept(KcpSession * conn){};   virtual void onClose(KcpSession * conn){};   virtual void onMsg(KcpSession * conn, int msgtype, UdpPacket * pack){}   virtual void onUdpTimeout(KcpSession * s){} };  int main() {   EventLoop::Instance()->init();    KNetEvent eve;   KcpServer server(EventLoop::Instance(), &eve);   server.start("127.0.0.1", 3001);    return EventLoop::Instance()->run(); }

创建一个WEBSocket服务器

自动完成解析websocket协议工作

class IWebEvent : public WebSocketEvent { public:   virtual void onHandshake(WebSocketConnect * conn){};   virtual void onAccept(WebSocketConnect * conn){};   virtual void onClose(WebSocketConnect * conn){};   virtual void onMsg(WebSocketConnect * conn, WebSocketPacket * pack){}; };  int main() {   EventLoop::Instance()->init();    IWebEvent wevent;   WebSocketServer server(EventLoop::Instance(), &wevent);   server.listen("127.0.0.1", 8080);    return EventLoop::Instance()->run(); }

创建一个http服务器

http仅支持简单的get post请求

const char * html = R"(<html> <body> <h2>login</h2> <p>hello world!</p>   <fORM action="login" method="post">     <input type="text" name="user"/>     <input type="passWord" name="pass"/>     <input type="submit" value="login"/>   </form> </body> </html>)";    const char * succeed = "" "<html>" "<body>" "<h2>login succeed</h2>" "</body>" "</html>";  const char * failing = "" "<html>" "<body>" "<h2>login failing</h2>" "</body>" "</html>";  int main() {   EventLoop::Instance()->init();   httpserver server(EventLoop::Instance());   server.listen("127.0.0.1", 80);    server.addGet("/", [](HttpConnect *conn, std::string_view & data) {     conn->autoMsg(html);   });    server.addPost("/login", [](HttpConnect *conn, std::string_view & data) {     HttpParam hp(data);     if (hp.getStr("user") == "jw" && hp.getStr("pass") == "1111")     {       conn->autoMsg(succeed);     }     else     {       conn->autoMsg(failing);     }   });    return EventLoop::Instance()->run(); }

mysql和线程池

这次我们用lua示例:

local config = DBConfig:new() config.device = "mysql" config.ip = "127.0.0.1" config.dbname = "jw_test" config.user = "root" config.pswd = "1111" config.port = 3306  pool = DBThreadPool:new(config) pool:create(1)  func = function(err, result)   while(result:fetch())   do     local id = result:getInt32()     local num = result:getInt32()     local name = result:getString()      local str = "id:" .. id .. ", num:" .. num .. ", name:" .. name     print(str)   end end  function exec()   local sql = SqlCommand:new("select * from test where id = ?")   sql:pushInt32(1)   sql:addToPool(pool, func) end  event_init() exec() timer = UTimer:new() timer:start(function ()     pool:update()   end, 10, 10) event_run()

任意扩展进程节点

你可以任意扩展你的进程,示例:

base进程cell进程db进程
start engine.exe base.luastart engine.exe cell.luastart engine.exe db.lua

提供一个serialization序列化工具

类似于c++的语法,写起来非常简单,示例:

struct testmsg {   int32 x   int32 y   int32 z   int8 state   vector<int32> vec      read{     [x, y, z, state]     if(state == 1)     {       [vec]     }   }   write{     [x, y, z, state, vec]   } }

通过serialization工具可以将协议的描述文件生成c++和lua代码,自动生成read()和write()的函数实现,使得数据结构快速映射到SocketBuffer中。

目前serialization序列化工具为实验性,可能是脆弱的,建议使用更强大的protobuf。该项目已集成lua-protobuf,使得c++和lua之间的协议无缝衔接。

lua-protobuf的开源地址: lua-protobuf

这个示例展示了c++客户端和lua服务器之间的通讯: 快速搭建服务器Demo

构建

你需要一个modern c++17编译器

  • vs2017 测试通过

  • GCc version 9.3.0 测试通过

上述内容就是怎么使用jwEngine框架,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网html频道。

--结束END--

本文标题: 怎么使用jwEngine框架

本文链接: https://www.lsjlt.com/news/83434.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么使用jwEngine框架
    本篇文章为大家展示了怎么使用jwEngine框架,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。jwEngine一个跨平台的c++<->lua服务器快速解...
    99+
    2024-04-02
  • 怎么使用HTML框架
    本篇内容主要讲解“怎么使用HTML框架”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用HTML框架”吧!通过使用框架,你可以在同一个浏览器窗口中显示不止一...
    99+
    2024-04-02
  • HTML框架怎么使用
    本篇内容主要讲解“HTML框架怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“HTML框架怎么使用”吧!     HTML框架 &...
    99+
    2024-04-02
  • 怎么使用pytorch框架
    这篇文章主要讲解了“怎么使用pytorch框架”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用pytorch框架”吧!  中文新闻情感分类 Bert-Pytorch-transform...
    99+
    2023-06-02
  • Vue框架怎么使用
    本文小编为大家详细介绍“Vue框架怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Vue框架怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。Vue 的使用步骤创建一个标签,用于数据的填充引入 Vue...
    99+
    2023-06-27
  • Node.Js框架怎么使用
    本篇内容介绍了“Node.Js框架怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!   项目前期准...
    99+
    2024-04-02
  • 怎么使用WCF框架
    这篇文章主要为大家展示了“怎么使用WCF框架”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“怎么使用WCF框架”这篇文章吧。框架其实就是一种规范的流程,它可以让我们的流程很清晰,代码更规范。下面我...
    99+
    2023-06-17
  • aforge.net框架怎么使用
    要使用AForge.NET框架,你需要进行以下步骤:1. 下载AForge.NET框架:你可以从官方下载AForge.NET框架的最...
    99+
    2024-02-29
    aforge.net
  • Python Flask框架怎么使用
    这篇文章主要介绍“Python Flask框架怎么使用”,在日常操作中,相信很多人在Python Flask框架怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python ...
    99+
    2023-06-22
  • php CodeIgniter框架怎么使用
    使用 CodeIgniter 框架分为以下几个步骤: 下载和安装 CodeIgniter 框架:你可以从 CodeIgniter...
    99+
    2023-10-22
    php CodeIgniter
  • spring框架怎么使用redis
    "spring框架使用redis的方法:在pom.xml中导入redis的相关依赖,例如:<dependency><groupId>redis.clients</groupId><arti...
    99+
    2024-04-02
  • sencha touch框架怎么使用
    要使用Sencha Touch框架,你需要按照以下步骤进行操作:1. 安装Sencha Cmd:Sencha Cmd 是一个用于构建...
    99+
    2023-08-19
    sencha touch
  • java struts框架怎么使用
    要使用Java Struts框架,你需要按照以下步骤进行操作:1. 首先,在你的Java开发环境中创建一个新的Java Web项目。...
    99+
    2023-09-25
    java struts
  • android one框架怎么使用
    Android One 是谷歌推出的一款针对低端设备的 Android 系统框架,旨在提供更好的性能和更长的软件更新周期。要使用 A...
    99+
    2023-10-23
    android
  • React新框架Mirror怎么使用
    本篇内容介绍了“React新框架Mirror怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Mirror 是一款基于 React、Re...
    99+
    2023-06-04
  • Bootstrap前端框架怎么使用
    今天小编给大家分享一下Bootstrap前端框架怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Bootstrap 简...
    99+
    2023-06-27
  • Gin框架中bind怎么使用
    本篇内容主要讲解“Gin框架中bind怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Gin框架中bind怎么使用”吧!概述Gin框架中,有bind函数可以非常方便的将url的查询参数qu...
    99+
    2023-06-22
  • Golang中tinyrpc框架怎么使用
    本篇内容介绍了“Golang中tinyrpc框架怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!tinyrpc功能tinyrpc基于T...
    99+
    2023-07-05
  • golang下grpc框架怎么使用
    今天小编给大家分享一下golang下grpc框架怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1. 什么是grpc和...
    99+
    2023-06-30
  • java的udp框架怎么使用
    Java中使用UDP框架主要有两个步骤:创建UDP套接字和发送/接收数据。1. 创建UDP套接字:```// 创建UDP套接字DatagramSocket socket = new DatagramSocket();```2. 发送数据...
    99+
    2023-08-11
    java
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作