Skip to content

Latest commit

 

History

History
138 lines (95 loc) · 5.12 KB

README_zh.md

File metadata and controls

138 lines (95 loc) · 5.12 KB

knet

English Version

一个跨平台的无锁且支持定时器的C++11网络库。

AppVeyor License Standard FOSSA Status

目录


特点

  • 支持Window、Linux、MacOS、FreeBSD
  • 同时支持同步、异步两种使用方式
  • 易于扩展,支持网络粘包
  • 代码少,无第三方库依赖
  • 无锁设计,每个连接的创建销毁逻辑都在同一个固定的线程中处理
  • 支持定时器,如心跳发送与检测

编译环境

  • CMake 3.15 及以上
  • Clang 3.8及以上(如果你使用Clang编译)
  • Visual Studio 2015及以上(Windows)
  • G++ 5及以上(Linux)
  • Xcode 9.4 及以上(MacOS)

如何使用

vcpkg install knet

从源代码编译安装

# 克隆源代码
git clone https://github.com/KibaAmor/knet.git # 或者 https://gitee.com/kibaamor/knet.git

# 进入项目目录
cd knet

# 生产编译工程文件
cmake . -B build

# 编译Release
cmake --build build --config Release

# 运行测试
(cd build && ctest --output-on-failure)

# 安装
(cd build && sudo make install)

核心概念

knet的核心概念是:socket的生产-消费

本质来说:客户端连接服务器服务器接受客户端的连接都是创建可以读写socket。而创建socket后,客户端和服务器对socket的操作都是一样的发送消息和接受消息。那么这个过程就可以看作是一个生成socket和消费socket的过程。如下图:

   producer                       consumer
┌───────────┐                  ┌──────────────┐
│ connector │    ——————————>   │    worker    │
│           │      socket      │              │
│ acceptor  │    ——————————>   │ async_worker │
└───────────┘                  └──────────────┘
  • connector 连接器,在客户端连接服务器时使用
  • acceptor 接收器,在服务器想要接受客户端连接时使用
  • worker socket的同步处理逻辑
  • async_worker socket的异步处理逻辑

示例程序

echo服务器和客户端

example目录下提供了使用knet实现的echo服务器echo客户端.

通信协议

┌───────────────┬──────┐
│ 数据大小(4字节) │ 数据 │
└───-───────────┴──────┘

网络包前4个字节为后面数据的大小,紧跟在后面的为数据。

echo服务器

echo服务器将接收到的数据原封不动的发回给客户端。

同时还设置了定时器检查是否在指定的时间内收到了客户端的消息,如果未在指定时间收到客户端消息,将关闭与客户端的连接。

服务器提供了两种:

echo客户端

客户端启动后主动连接服务器(如果连接不上服务器,则会自动重连服务器),连接成功后,会主动给服务器发送不完整的网络包。

在收到服务器返回的网络包时,会对数据封包进行校验,失败时会断开连接。

客户端也提供了两种:

授权

FOSSA Status