千家信息网

怎么使用jwEngine框架

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,本篇文章为大家展示了怎么使用jwEngine框架,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。jwEngine一个跨平台的c++<->lua服务器快速解决方案
千家信息网最后更新 2026年11月01日怎么使用jwEngine框架

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

jwEngine

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

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

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

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

创建一个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"(  

login

hello world!

)"; const char * succeed = "" "" "" "

login succeed

" "" ""; const char * failing = "" "" "" "

login failing

" "" ""; 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 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框架,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。

服务器 服务 进程 线程 c++ 框架 示例 代码 工具 建议 开发 支持 之间 事件 内容 序列 底层 技能 接口 数据 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 小米移动互联网科技园 南京欣网互联网络科技有限公司 河南云网互联网络科技有限公司 互联网科技工作委员会 国智互联网科技 互联网核心科技是什么 互联网科技媒体 互联网科技logo 互联网金融监管科技 深圳前海聚择互联网科技有限公司 受益于互联网科技的高速发展 宜昌元轩互联网科技有限公司 亳州好赞互联网科技有限公司 互联网保险科技创业 吉林省码上互联网科技电话 长沙渺峰互联网科技有限公司 中国科技和美国互联网 保山互联网科技靠谱吗 东风日产互联网科技公司叫什么 现代科技的标志之一的互联网 与互联网科技公司 科技互联网公司logo 互联网 视角下的科技创新 盛创互联网科技有限公司 互联网科技与管理 宜昌元轩互联网科技有限公司 半导体行业属于互联网高科技类吗 易企秀互联网科技是做什么的 昆明中奇联合互联网科技 互联网科技新闻
0