代码拉取完成,页面将自动刷新
简单的网络编程库封装,基于ASIO standalone版本封装,核心特点是设计了极简API,让网络编程变得非常简单。服务端使用了“1 => n”线程模型,监听一个线程,多个工作线程(n >= 0), 单个连接的所有事件和数据回调都在一个线程。尽可能提升服务器性能。API部分都是线程安全的,放心使用。支持headonly使用,包含头文件即可。
库本身不需要编译,内置了一些示例代码,可以进行编译。 最新版本使用了C++17语言的一些特性,需要支持C++17的编译器和CMake工具。 由于国内访问github困难,内置了依赖的第三方包,如fmt,spdlog等,可以直接使用根目录下的./build.sh 可自动展开进行编译(需要先安装unzip等工具)。
git submodule init
git submodule update --recursive
cmake .
make -j4
# or
./build.sh
#include "knet.hpp"
using namespace knet::tcp;
/*
//示例协议头
struct UserMsgHead {
uint32_t length; //body length
uint32_t type;
char data[0];
};
*/
class TcpSession : public TcpConnection<TcpSession> {
public:
//计算出一个包的整体长度,如果长度不够返回0或负数
virtual int32_t handle_package(const char * data, uint32_t len ){
/*
if (len < sizeof(UserMsgHead)){
return 0;
}
UserMsgHead * head = (UserMsgHead*) data;
return head->length + sizeof(UserMsgHead);
*/
return len ;
}
//处理收到的网络事件
virtual bool handle_event(NetEvent evt)
{
return true;
}
//处理一个网络协议包,通过handle_package 计算出来的整个包
virtual bool handle_data(const std::string &msg )
{
return true;
}
};
/*
class MyFactory: public knet::KNetFactory<TcpSession>{
public:
virtual void on_create(TPtr ptr) {
dlog("connection created event in my factory ");
}
virtual void on_release(TPtr ptr) {
dlog("connection release event in my factory ");
}
};
MyFactory factory;
可以使用Factory工厂类进行连接实例的管理,从创建到释放整个生命周期。
TcpListener<TcpSession> listener(&factory); //这里使用原生指针主要是方便继承类
*/
TcpListener<TcpSession> listener;
listener.start(8899);
//使用和服务器相同的TcpSession
TcpConnector<TcpSession> connector;
connector.start();
connector.add_connection("127.0.0.1", 8899);
对UDP/KCP/HTTP/WebSocket 进行了简单的封装,可以初步使用。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。